Swift Docker एकीकरण परीक्षण: उन्नत स्तर

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

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

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

परिचय

\n

एकीकरण परीक्षण (Integration Testing) डेवलपमेंट का एक महत्वपूर्ण चरण है, जो आपके Swift ऐप के घटकों और बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम, नेटवर्क सर्विसेज) के बीच इंटरैक्शन की जाँच करता है। लेकिन macOS/iOS पर पारंपरिक एकीकरण परीक्षण अक्सर "एनवायरनमेंट प्रॉब्लम" से ग्रस्त होते हैं — डेवलपर की मशीन पर चलने वाले टेस्ट CI सर्वर पर लाइब्रेरी वर्जन, नेटवर्क सेटिंग्स या DB कॉन्फ़िगरेशन में अंतर के कारण फेल हो सकते हैं।

\n

Docker इस समस्या को मौलिक रूप से हल करता है: आप सभी निर्भरताओं (PostgreSQL, Redis, Mock सर्वर) को अलग-अलग कंटेनरों में पैकेज करते हैं, जो किसी भी प्लेटफ़ॉर्म पर समान रूप से चलते हैं। इस लेख में, हम Swift के साथ Docker का उपयोग करके उन्नत एकीकरण परीक्षण तकनीकों को कवर करेंगे: टेस्ट एनवायरनमेंट सेटअप से लेकर समानांतर रन और CI/CD इंटीग्रेशन तक।

\n\n

1. Docker Compose के साथ टेस्ट एनवायरनमेंट तैयार करना

\n

टेस्ट के लिए एक अलग एनवायरनमेंट बनाकर शुरू करते हैं। प्रत्येक सर्विस को मैन्युअल रूप से चलाने के बजाय, सभी निर्भरताओं को घोषित करने के लिए docker-compose.yml का उपयोग करें।

\n\n

Swift प्रोजेक्ट के लिए docker-compose.yml का उदाहरण

\n
version: '3.8'\nservices:\n  postgres_test:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: test_user\n      POSTGRES_PASSWORD: test_pass\n      POSTGRES_DB: swift_test_db\n    ports:\n      - "5433:5432"  # स्थानीय DB से टकराव से बचने के लिए गैर-मानक पोर्ट\n    tmpfs: /var/lib/postgresql/data  # मेमोरी में डेटा — तेज़ सफाई\n\n  redis_test:\n    image: redis:7-alpine\n    ports:\n      - "6380:6379"\n\n  mock_server:\n    build: ./mock-server  # Vapor पर कस्टम मॉक सर्वर\n    ports:\n      - "8081:8080"\n    environment:\n      LOG_LEVEL: debug
\n\n

टेस्ट के लिए डायनामिक कॉन्फ़िगरेशन का Swift कोड

\n

टेस्ट को Docker कंटेनरों से कनेक्ट करने के लिए, स्थानीय सर्विसेज के बजाय एनवायरनमेंट वेरिएबल का उपयोग करें:

\n
import XCTest\n\nfinal class IntegrationTests: XCTestCase {\n    var app: XCTestApplication?\n\n    override func setUp() async throws {\n        // एनवायरनमेंट वेरिएबल से कॉन्फ़िगरेशन प्राप्त करें (CI या docker-compose में सेट)\n        let dbHost = ProcessInfo.processInfo.environment["DB_HOST"] ?? "localhost"\n        let dbPort = Int(ProcessInfo.processInfo.environment["DB_PORT"] ?? "5433") ?? 5433\n        let redisHost = ProcessInfo.processInfo.environment["REDIS_HOST"] ?? "localhost"\n        let mockHost = ProcessInfo.processInfo.environment["MOCK_HOST"] ?? "http://localhost:8081"\n\n        // टेस्ट ऐप कॉन्फ़िगर करें (जैसे Vapor या Kitura)\n        let config = AppConfig(\n            database: DatabaseConfig(host: dbHost, port: dbPort, \n                                     username: "test_user", password: "test_pass",\n                                     database: "swift_test_db"),\n            redis: RedisConfig(host: redisHost, port: 6380),\n            mockServiceURL: mockHost\n        )\n\n        app = try await XCTestApplication.start(config: config)\n    }\n\n    override func tearDown() async throws {\n        try await app?.shutdown()\n    }\n}
\n\n

2. उन्नत सेटअप: समानांतर रन और टेस्ट आइसोलेशन

\n

एकीकरण परीक्षणों की सबसे बड़ी समस्या उनका निष्पादन समय है। Docker आपको टेस्ट एनवायरनमेंट की कई कॉपी समानांतर चलाने की अनुमति देता है, जिससे प्रक्रिया काफी तेज़ हो जाती है।

\n\n

आइसोलेशन रणनीति: प्रति टेस्ट क्लास एक कंटेनर

\n

अद्वितीय इंस्टेंस बनाने के लिए docker-compose --project-name का उपयोग करें:

\n
#!/bin/bash\n# समानांतर निष्पादन के लिए अद्वितीय project-name के साथ टेस्ट चलाएं\nTEST_SUITE=$1\nPROJECT_NAME="swift_test_${TEST_SUITE}_$(date +%s)"\n\ndocker-compose -p $PROJECT_NAME up -d --force-recreate\nsleep 5  # कंटेनर इनिशियलाइज़ेशन की प्रतीक्षा करें\n\n# विशिष्ट टेस्ट क्लास चलाएं\nxcodebuild test -scheme MyApp -destina

ब्लॉग

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