اختبار التكامل PHP مع Docker: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يعتبر اختبار التكامل PHP في Docker أمرًا لا غنى عنه



نادرًا ما يقتصر تطوير تطبيقات PHP الحديثة على خادم واحد. قواعد البيانات، التخزين المؤقت (Redis, Memcached)، قوائم الانتظار (RabbitMQ)، واجهات برمجة التطبيقات الخارجية — كلها تتطلب التحقق من تفاعل المكونات. اختبارات الوحدة (unit tests) تعزل الكود، لكنها لا تضمن أن الفئة A تعمل بشكل صحيح مع الفئة B عبر قاعدة بيانات حقيقية. هنا يأتي دور اختبار التكامل.



مشكلة النهج التقليدي هي إعداد البيئة. يقضي المطور ساعات في إعداد MySQL، ضبط الأذونات، تثبيت إضافات PHP. Docker يحل هذه المشكلة نهائيًا. في هذه المقالة، سنشرح كيفية تنظيم اختبار التكامل لتطبيق PHP باستخدام Docker و Docker Compose. ستحصل على إعدادات جاهزة، أمثلة كود، وتوصيات للتحسين.



1. إعداد بيئة Docker لاختبارات PHP



1.1. هيكل المشروع الأساسي



لنفترض أن لدينا تطبيق PHP بسيط على Symfony أو Laravel (أي إطار عمل سيناسب). سننشئ ملف docker-compose.yml في جذر المشروع:



version: '3.8'

services: php: build: . volumes: - .:/var/www/html environment: - DATABASE_URL=mysql://test_user:test_pass@db:3306/test_db depends_on: - db

db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root_pass MYSQL_DATABASE: test_db MYSQL_USER: test_user MYSQL_PASSWORD: test_pass ports: - "3307:3306" # توجيه إلى منفذ غير قياسي لتجنب التعارض مع قاعدة البيانات المحلية

test_runner: image: php:8.2-cli volumes: - .:/var/www/html working_dir: /var/www/html entrypoint: ["vendor/bin/phpunit"] depends_on: - db - php


النقاط الرئيسية:

  • خدمة test_runner تستخدم حاوية منفصلة مع PHP CLI — وهذا يعزل تنفيذ الاختبارات عن التطبيق الرئيسي.
  • قاعدة البيانات تُرفع بمخطط نظيف. لكل تشغيل اختبارات يمكننا إعادة إنشائها.
  • منفذ MySQL مُوجه إلى 3307 لعدم التداخل مع قاعدة البيانات المحلية للمطور.


1.2. Dockerfile لتطبيق PHP



سننشئ Dockerfile للخدمة الرئيسية php:



FROM php:8.2-fpm

RUN docker-php-ext-install pdo_mysql mysqli

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

COPY . .

RUN composer install --no-interaction --prefer-dist


هذه الصورة ستُستخدم للتطوير وللاختبارات. من المهم تثبيت إضافة pdo_mysql — بدونها ستفشل الاختبارات التي تتعامل مع قاعدة البيانات.



2. كتابة اختبارات التكامل باستخدام PHPUnit



2.1. الإعداد الأساسي لـ PHPUnit



تأكد من تثبيت PHPUnit (عبر Composer). يجب أن يشير ملف phpunit.xml إلى قاعدة بيانات الاختبار:



<?xml version="1.0" encoding="UTF-8"?><phpunit bootstrap="vendor/autoload.php">    <php>        <env name="DATABASE_URL" value="mysql://test_user:test_pass@db:3306/test_db" />        <env name="APP_ENV" value="test" />    </php>    <testsuites>        <testsuite name="Integration">            <directory>tests/Integration</directory>        </testsuite>    </testsuites></phpunit>


2.2. مثال على اختبار تكامل: العمل مع قاعدة البيانات



لنفترض أن لدينا مستودع للمستخدمين. سنكتب اختبارًا يتحقق من الحفظ والبحث:



<?php

namespace App\\Tests\\Integration;

use App\\Entity\\User;use App\\Repository\\UserRepository;use Doctrine\\ORM\\EntityManagerInterface;use Symfony\\Bundle\\FrameworkBundle\\Test\\KernelTestCase;

class UserRepos

المدونات

توصيات الكتب