Docker के साथ C++ एकीकरण परीक्षण: उन्नत स्तर

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

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

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

Docker के साथ C++ एकीकरण परीक्षण: उन्नत स्तर

\n\n

आधुनिक C++ अनुप्रयोगों का विकास तेजी से माइक्रोसर्विसेज और कंटेनरीकरण के प्रतिमान की ओर बढ़ रहा है। एकीकरण परीक्षण (Integration Testing) एक महत्वपूर्ण चरण बन गया है, जो सिस्टम के घटकों के बीच परस्पर क्रिया को यथासंभव वास्तविक परिस्थितियों में जांचने की अनुमति देता है। Docker पृथक और पुनरुत्पादनीय परीक्षण के लिए एक आदर्श वातावरण प्रदान करता है। इस लेख में, हम Docker का उपयोग करके C++ एकीकरण परीक्षण की उन्नत तकनीकों पर चर्चा करेंगे, जिसमें कंटेनरों की स्थापना, Google Test के साथ परीक्षण लिखना और CI/CD पाइपलाइनों में एकीकरण शामिल है।

\n\n

1. Docker C++ एकीकरण परीक्षण के लिए आदर्श उपकरण क्यों है?

\n\n

पारंपरिक यूनिट परीक्षण अलग-अलग फ़ंक्शन या क्लास की जाँच करता है, लेकिन समग्र रूप से सिस्टम के सही काम करने की गारंटी नहीं देता है। एकीकरण परीक्षण कनेक्शनों की जाँच करते हैं: डेटाबेस, नेटवर्क प्रोटोकॉल, फ़ाइल सिस्टम, बाहरी API। यहाँ Docker अपरिहार्य हो जाता है:

\n\n
    \n
  • पुनरुत्पादनीयता: Docker इमेज में वातावरण की सटीक प्रतिलिपि होती है (कंपाइलर, लाइब्रेरीज़, पर्यावरण चर)। स्थानीय रूप से पास हुआ परीक्षण CI सर्वर और किसी अन्य डेवलपर के पास भी पास होगा।
  • \n
  • पृथक्करण: प्रत्येक परीक्षण एक साफ कंटेनर में चलता है। वैश्विक OS सेटिंग्स या पिछले परीक्षणों के अवशिष्ट डेटा से कोई "संदूषण" नहीं होता है।
  • \n
  • समानांतरता: CI/CD में समय बचाने के लिए एक साथ कई परीक्षण कंटेनर चलाए जा सकते हैं।
  • \n
  • निर्भरता प्रबंधन: Docker Compose आपको कुछ ही सेकंड में पूरा बुनियादी ढाँचा तैयार करने की अनुमति देता है: PostgreSQL, Redis, Kafka।
  • \n
\n\n

2. Docker Compose के साथ परीक्षण वातावरण की स्थापना

\n\n

एक सामान्य परिदृश्य पर विचार करें: एक C++ सेवा जो PostgreSQL से डेटा पढ़ती है और इसे RabbitMQ को भेजती है। हमें इन तीन घटकों के एकीकरण का परीक्षण करने की आवश्यकता है।

\n\n

हम docker-compose.test.yml बनाएंगे:

\n\n
version: '3.8'\nservices:\n  postgres_test:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: testdb\n      POSTGRES_USER: testuser\n      POSTGRES_PASSWORD: testpass\n    ports:\n      - "5432:5432"\n    healthcheck:\n      test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  rabbitmq_test:\n    image: rabbitmq:3-management-alpine\n    environment:\n      RABBITMQ_DEFAULT_USER: testuser\n      RABBITMQ_DEFAULT_PASS: testpass\n    ports:\n      - "5672:5672"\n    healthcheck:\n      test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  test_runner:\n    build:\n      context: .\n      dockerfile: Dockerfile.test\n    depends_on:\n      postgres_test:\n        condition: service_healthy\n      rabbitmq_test:\n        condition: service_healthy\n    environment:\n      DB_HOST: postgres_test\n      DB_PORT: 5432\n      DB_NAME: testdb\n      DB_USER: testuser\n      DB_PASS: testpass\n      RMQ_HOST: rabbitmq_test\n      RMQ_PORT: 5672\n
\n\n

मुख्य बिंदु healthcheck है। हम तब तक परीक्षण नहीं चलाते जब तक डेटाबेस और संदेश ब्रोकर उपयोग के लिए तैयार न हों। यह परीक्षणों में "रेस कंडीशन" को रोकता है।

\n\n

3. Google Test के साथ C++ में एकीकरण परीक्षण लिखना

\n\n

प्रदर्शन के लिए हम Google Test (gtest) का उपयोग करते हैं - C++ परीक्षण के लिए डी-फैक्टो मानक। हम एक परीक्षण लिखेंगे जो PostgreSQL में डेटा सम्मिलन और RabbitMQ के माध्यम से उसके पठन की जाँच करता है।

\n\n

पहले RabbitMQ के साथ काम करने के लिए एक सरल रैपर बनाएं (सरलीकृत):

\n\n
// rabbitmq_client.h\n#pragma once\n#include <string>\n#include <amqpcpp.h>\n\nclass RabbitMQClient {\npublic:\n    RabbitMQClient(const std::string& host, int port,\n                   const std::string& user, const std::string& pass);\n    bool sendMessage(const std::string& queue, const                

ब्लॉग

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