Docker के साथ C++ एकीकरण परीक्षण
C++ में आधुनिक विकास के लिए न केवल गुणवत्तापूर्ण कोड लिखना आवश्यक है, बल्कि वास्तविक परिस्थितियों में इसके विश्वसनीय संचालन को सुनिश्चित करना भी आवश्यक है। एकीकरण परीक्षण एक महत्वपूर्ण चरण है जो सिस्टम घटकों: डेटाबेस, नेटवर्क सेवाओं, फ़ाइल सिस्टम के बीच परस्पर क्रिया की जाँच करने की अनुमति देता है। इन उद्देश्यों के लिए Docker का उपयोग एक पृथक, पुनरुत्पादनीय वातावरण प्रदान करता है जो CI/CD पाइपलाइनों के लिए आदर्श है। इस लेख में, हम Docker की सहायता से C++ अनुप्रयोगों के लिए एकीकरण परीक्षण सेट अप करने का तरीका समझेंगे और व्यावहारिक उदाहरण प्रस्तुत करेंगे।
C++ एकीकरण परीक्षण के लिए Docker क्यों?
C++ एकीकरण परीक्षण के पारंपरिक दृष्टिकोण अक्सर समस्याओं का सामना करते हैं:
- वातावरण पर निर्भरता: परीक्षण डेवलपर की मशीन पर काम कर सकते हैं, लेकिन लाइब्रेरी के विभिन्न संस्करणों के कारण बिल्ड सर्वर पर विफल हो सकते हैं।
- सेट अप की जटिलता: वास्तविक डेटाबेस या बाहरी API के साथ परीक्षण के लिए मैन्युअल कॉन्फ़िगरेशन की आवश्यकता होती है।
- समानांतर निष्पादन: साझा संसाधनों के कारण कई परीक्षण रन आपस में टकरा सकते हैं।
Docker हल्के, पृथक कंटेनर प्रदान करके इन समस्याओं का समाधान करता है। आप एक परीक्षण डेटाबेस शुरू कर सकते हैं, अपनी C++ सेवा चला सकते हैं और परीक्षण निष्पादित कर सकते हैं - यह सब एक ही docker-compose फ़ाइल के अंतर्गत। यह गारंटी देता है कि वातावरण किसी भी मशीन पर समान होगा।
प्रोजेक्ट सेट अप: मूल उदाहरण
एक सरल C++ सेवा पर विचार करें जो PostgreSQL में डेटा संग्रहीत करती है। एकीकरण परीक्षण के लिए हमें आवश्यकता होगी:
- परीक्षणों के साथ C++ कोड (हम Google Test का उपयोग करते हैं)।
- परीक्षणों को बनाने और चलाने के लिए
Dockerfile। - कंटेनरों के ऑर्केस्ट्रेशन के लिए
docker-compose.yml।
प्रोजेक्ट संरचना:
my_cpp_project/├── src/│ ├── main.cpp│ ├── database.cpp│ └── database.h├── tests/│ └── test_integration.cpp├── CMakeLists.txt├── Dockerfile└── docker-compose.yml
Dockerfile:
FROM gcc:latest AS builder
WORKDIR /appCOPY . .
RUN apt-get update && apt-get install -y cmake libpq-devRUN cmake -B build -DCMAKE_BUILD_TYPE=ReleaseRUN cmake --build build
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y libpq-devCOPY --from=builder /app/build/tests /app/testsCOPY --from=builder /app/build/my_app /app/my_app
ENTRYPOINT ["/app/tests"]docker-compose.yml:
version: '3.8'services: db: image: postgres:15 environment: POSTGRES_USER: testuser POSTGRES_PASSWORD: testpass POSTGRES_DB: testdb ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"] interval: 5s timeout: 5s retries: 5
test: build: . depends_on: db: condition: service_healthy environment: DB_HOST: db DB_PORT: 5432 DB_USER: testuser DB_PASSWORD: testpass DB_NAME: testdbC++ में एकीकरण परीक्षण लिखना
अब एक परीक्षण बनाते हैं जो डेटाबेस में लिखने और पढ़ने की जाँच करता है। हम PostgreSQL के साथ काम करने के लिए Google Test और libpqxx लाइब्रेरी का उपयोग करते हैं।
tests/test_integration.cpp:
#include <gtest/gtest.h>#include <pqxx/pqxx>#include <string>
class DatabaseTest : public ::testing::Test {protected: void SetUp() override { conn = new pqxx::connection( "host=" + std::string(std::getenv("DB_HOST")) + " port=" + std::string(std::getenv("DB_PORT")) + " user=" + std::string(std::getenv("DB_USER")) + " password=" + std::string(std::getenv("DB_PASSWORD")) + " dbname=" + std::string(std::getenv("