PHP के साथ Docker का एकीकरण परीक्षण: एक संपूर्ण गाइड

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

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

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

PHP के साथ Docker का एकीकरण परीक्षण: A से Z तक

\n\n

आधुनिक PHP विकास गुणवत्ता परीक्षण के बिना अकल्पनीय है। जहाँ यूनिट परीक्षण कोड के अलग-अलग टुकड़ों की जाँच करते हैं, वहीं एकीकरण परीक्षण यह सुनिश्चित करता है कि सिस्टम के सभी घटक एक साथ काम करते हैं: डेटाबेस, Redis, बाहरी API और फ़ाइल सिस्टम। Docker इस प्रक्रिया को पुनरुत्पादनीय, तेज़ और डेवलपर के वातावरण से स्वतंत्र बनाता है। इस लेख में, हम शुरू से Docker का उपयोग करके PHP अनुप्रयोग का एकीकरण परीक्षण सेट करने का तरीका समझेंगे।

\n\n

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

\n\n

एकीकरण परीक्षण की पारंपरिक समस्याएँ:

\n
    \n
  • वातावरण पर निर्भरता — प्रत्येक डेवलपर के पास MySQL, PHP, Redis का अपना संस्करण होता है।
  • \n
  • डेटा प्रदूषण — परीक्षण वास्तविक DB में कचरा छोड़ देते हैं।
  • \n
  • समानांतर चलाने में कठिनाई — परीक्षण एक-दूसरे से टकराते हैं।
  • \n
\n\n

Docker इन समस्याओं को हल करता है:

\n
    \n
  • प्रत्येक परीक्षण निर्भरताओं के ज्ञात संस्करणों वाले साफ कंटेनर में चलता है।
  • \n
  • कंटेनर अलग-थलग होते हैं और चलने के बाद हटा दिए जाते हैं।
  • \n
  • Docker Compose एक ही कमांड से पूरे बुनियादी ढाँचे को खड़ा करने की अनुमति देता है।
  • \n
\n\n

चरण 1: प्रोजेक्ट संरचना और Docker Compose

\n\n

हम Symfony पर एक सामान्य PHP अनुप्रयोग से शुरू करते हैं। परीक्षण वातावरण के लिए एक फ़ाइल docker-compose.test.yml बनाएँ:

\n\n
version: '3.8'\nservices:\n  php:\n    build:\n      context: .\n      dockerfile: Dockerfile.test\n    environment:\n      DATABASE_URL: "mysql://test:test@mysql:3306/test_db?serverVersion=8.0"\n      REDIS_URL: "redis://redis:6379"\n    depends_on:\n      - mysql\n      - redis\n\n  mysql:\n    image: mysql:8.0\n    environment:\n      MYSQL_ROOT_PASSWORD: root\n      MYSQL_DATABASE: test_db\n      MYSQL_USER: test\n      MYSQL_PASSWORD: test\n    tmpfs: /var/lib/mysql  # मेमोरी में डेटा — तेज़\n\n  redis:\n    image: redis:7-alpine\n    tmpfs: /data
\n\n

फ़ाइल Dockerfile.test:

\n\n
FROM php:8.2-cli\n\nRUN docker-php-ext-install pdo_mysql\nRUN pecl install redis && docker-php-ext-enable redis\n\nCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer\n\nWORKDIR /app\nCOPY . .\n\nRUN composer install --no-interaction --prefer-dist\n\nCMD ["vendor/bin/phpunit", "--configuration", "phpunit.xml.dist"]
\n\n

tmpfs पर ध्यान दें — यह मेमोरी में एक अस्थायी फ़ाइल सिस्टम माउंट कर रहा है। डेटाबेस और Redis डिस्क की तुलना में कई गुना तेज़ी से काम करेंगे, जो तेज़ परीक्षणों के लिए महत्वपूर्ण है।

\n\n

चरण 2: एकीकरण परीक्षणों के लिए PHPUnit सेट करना

\n\n

एक अलग कॉन्फ़िगरेशन phpunit.integration.xml.dist बनाएँ:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"\n         bootstrap="tests/bootstrap.php"\n         colors="true">\n    <testsuites>\n        <testsuite name="Integration">\n            <directory>tests/Integration</directory>\n        </testsuite>\n    </testsuites>\n    <php>\n        <env name="APP_ENV" value="test"/>\n        <env name="KERNEL_CLASS" value="App\\Kernel"/>\n    </php>\n</phpunit>
\n\n

परीक्षण वातावरण को आरंभ करने के लिए फ़ाइल tests/bootstrap.php:

\n\n
<?php\n\nrequire dirname(__DIR__) . '/vendor/autoload.php';\n\n// MySQL और Redis के तैयार होने तक प्रतीक्षा करें\n$maxAttempts = 30;\n$connected = false;\n\nfor ($i = 0; $i < $maxAttempts; $i++) {\n    try {\n        $pdo = new PDO(\n            $_ENV['DATABASE_URL'],\n            null, null,\n            [PDO::ATTR_TIMEOUT => 1]\n        );\n        $connected = true;\n        break;\n    } catch (PDOException $e) {\n        sleep(1);\n    }\n}\n\                

ब्लॉग

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