C++ अनुप्रयोगों का E2E परीक्षण: सिद्धांत से लेकर वास्तविक CI/CD तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

क्यों "सिर्फ यूनिट टेस्ट" अब पर्याप्त नहीं हैं?

\n\n

आपने C++ में एकदम सही कोड लिखा। कंपाइलेशन सफल रहा, यूनिट टेस्ट पास हो गए, कोड रिव्यू स्वीकृत हो गया। आप रिलीज़ करते हैं - और एक घंटे बाद उपयोगकर्ता शिकायत करते हैं: "बटन दब नहीं रहा", "डेटाबेस जवाब नहीं दे रहा", "GUI हैंग हो गया"। परिचित लगता है?

\n\n

समस्या यह है कि यूनिट टेस्ट फ़ंक्शन की जाँच करते हैं, लेकिन परिदृश्य की नहीं। वे पृथक होते हैं। जबकि वास्तविक दुनिया में आपका C++ कोड नेटवर्क, फ़ाइल सिस्टम, GPU, बाहरी API और अन्य थ्रेड्स के साथ इंटरैक्ट करता है। यहीं पर C++ अनुप्रयोगों का E2E परीक्षण (एंड-टू-एंड या स्कोपी परीक्षण) काम आता है।

\n\n

इस लेख में, हम देखेंगे कि कैसे एकीकरण त्रुटियों की अराजकता को स्वचालित जाँचों की एक सुव्यवस्थित प्रणाली में बदला जाए। आप जानेंगे कि कौन से उपकरण वास्तव में काम करते हैं, ऐसे परीक्षण कैसे लिखें जो पहले रन पर टूटें नहीं, और E2E को CI/CD पाइपलाइन में कैसे शामिल करें। चलिए शुरू करते हैं!

\n\n

C++ के संदर्भ में E2E परीक्षण क्या है?

\n\n

E2E परीक्षण "शुरू से अंत तक" पूर्ण उपयोगकर्ता परिदृश्य की जाँच है। मॉड्यूलर परीक्षणों के विपरीत, जो एक अलग फ़ंक्शन की जाँच करते हैं, E2E परीक्षण आपके एप्लिकेशन (या इसके महत्वपूर्ण भाग) को प्रोडक्शन के जितना संभव हो उतना करीब वातावरण में चलाता है।

\n\n

C++ के लिए इसका मतलब हो सकता है:

\n
    \n
  • डेस्कटॉप एप्लिकेशन: विंडो खोलना, "सबमिट" बटन पर क्लिक करना, जाँच करना कि डेटा डेटाबेस में चला गया।
  • \n
  • सर्वर एप्लिकेशन: आपके REST API को HTTP अनुरोध भेजना, प्रतिक्रिया और डेटाबेस की स्थिति की जाँच करना।
  • \n
  • एम्बेडेड/सॉफ़्टवेयर: इनपुट पर सिग्नल देना, एक निश्चित समय के बाद आउटपुट सिग्नल की जाँच करना।
  • \n
\n\n

मुख्य अंतर वास्तविक वातावरण है। डेटाबेस या नेटवर्क के लिए कोई मॉक-ऑब्जेक्ट नहीं। केवल वास्तविक हार्डवेयर (या Docker)।

\n\n

उपकरण: 2024 में C++ के लिए वास्तव में क्या काम करता है?

\n\n

चलिए सीधे मुद्दे पर आते हैं। यहाँ वह स्टैक है जिसका हम वास्तविक उपयोग में करते हैं:

\n\n
    \n
  • Catch2 या Google Test - परीक्षण संरचना लिखने के लिए (Arrange-Act-Assert)।
  • \n
  • Docker - स्वच्छ वातावरण (डेटाबेस, कतारें, निर्भरताएँ) स्थापित करने के लिए।
  • \n
  • Pytest + subprocess - ऑर्केस्ट्रेशन के लिए (हाँ, Python, लेकिन यह C++ बाइनरी को जोड़ने के लिए आदर्श है)।
  • \n
  • Selenium/Appium - यदि आपके पास Qt या WebView पर GUI है।
  • \n
  • CMake + CTest - परीक्षण चलाने और परिणाम एकत्र करने के लिए।
  • \n
\n\n

केवल C++ में E2E परीक्षण लिखने की कोशिश न करें। यह कष्टदायक है। Python को गोंद के रूप में उपयोग करें - यह एकीकरण परिदृश्यों के लिए तेज़ है।

\n\n

अभ्यास: REST API के लिए C++ में E2E परीक्षण लिखना

\n\n

मान लीजिए, हमारे पास cpp-httplib (या crow, या drogon) पर एक C++ सर्वर है। यह /api/user पते पर POST अनुरोध स्वीकार करता है और उपयोगकर्ता को PostgreSQL में सहेजता है।

\n\n

हम एक E2E परीक्षण लिखेंगे जो:

\n
    \n
  1. PostgreSQL के साथ Docker कंटेनर चालू करता है।
  2. \n
  3. हमारे सर्वर को कंपाइल और चलाता है।
  4. \n
  5. curl (या C++ क्लाइंट) के माध्यम से HTTP अनुरोध भेजता है।
  6. \n
  7. जाँचता है कि उपयोगकर्ता डेटाबेस में दिखाई दिया।
  8. \n
\n\n

चरण 1: परीक्षण वातावरण के लिए Docker-compose

\n\n
version: '3.8'\nservices:\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: testdb\n      POSTGRES_USER: testuser\n      POSTGRES_PASSWORD: testpass\n    ports:\n      - "5432:5432"\n  app:\n    build: .\n    depends_on:\n      - db\n    ports:\n      - "8080:8080"\n    environment:\n      DB_HOST: db\n
\n\n

चरण 2: Catch2 के साथ C++ परीक्षण

\n\n
// test_e2e_api.cpp\n#include <catch2/catch_test_macros.hpp>\n#include <httplib.h>\n#include <nlohmann/json.hpp>\n#include <cstdlib>\n\nTEST_CASE("E2E: Create user via API and verify in DB") {\n    // Arrange\n    httplib::Client cli("localhost", 8080);\n    nlohmann::json user = {\n        {"name", "John Doe"}                

ब्लॉग

पुस्तक अनुशंसाएँ