Testes de Integração PHP com Docker: Nível Avançado

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes de Integração PHP com Docker: dos cenários básicos às soluções industriais

\n\n

Testes de integração são uma etapa criticamente importante do desenvolvimento, que verifica a interação entre diferentes componentes do sistema: banco de dados, cache, APIs externas e a própria lógica de negócio. No mundo PHP, onde as aplicações frequentemente trabalham em conjunto com MySQL/PostgreSQL, Redis e servidores web, o Docker se torna uma ferramenta indispensável para criar ambientes de teste isolados e reproduzíveis. Neste artigo, abordaremos técnicas avançadas de testes de integração de aplicações PHP usando Docker, que ajudarão você a elevar a qualidade do código a um novo patamar.

\n\n

Por que o Docker é o companheiro ideal para testes de integração PHP?

\n\n

As abordagens tradicionais para testes de integração frequentemente sofrem com problemas de ambiente: bancos de dados podem ser diferentes na máquina local e no servidor CI, portas estão ocupadas e dependências não coincidem. O Docker resolve esses problemas de forma radical:

\n\n
    \n
  • Isolamento: cada cenário de teste é executado em um contêiner limpo, eliminando efeitos colaterais de testes anteriores.
  • \n
  • Reprodutibilidade: imagens com versões fixas de PHP, extensões e serviços garantem que os testes sejam executados da mesma forma em qualquer máquina.
  • \n
  • Paralelismo: você pode executar vários conjuntos de testes simultaneamente, cada um em seu próprio contêiner com um banco de dados único.
  • \n
  • Velocidade: ferramentas modernas, como Testcontainers ou Docker Compose, permitem criar e destruir ambientes em segundos.
  • \n
\n\n

Para PHP, isso é especialmente relevante, pois uma aplicação típica interage com vários recursos externos — desde filas (RabbitMQ) até mecanismos de busca (Elasticsearch).

\n\n

Configuração de um ambiente de teste em múltiplas camadas com Docker Compose

\n\n

O primeiro passo para testes avançados é criar um docker-compose.yml flexível, que inclua não apenas PHP, mas todos os serviços necessários. Considere um exemplo para uma aplicação em Laravel/Symfony que usa MySQL, Redis e uma API REST externa:

\n\n
version: '3.8'\n\nservices:\n  php-test:\n    image: php:8.2-cli\n    volumes:\n      - ./:/app\n    working_dir: /app\n    environment:\n      - DB_HOST=mysql-test\n      - DB_DATABASE=test_db\n      - REDIS_HOST=redis-test\n      - API_BASE_URL=http://mock-api:8080\n    depends_on:\n      mysql-test:\n        condition: service_healthy\n      redis-test:\n        condition: service_started\n      mock-api:\n        condition: service_started\n\n  mysql-test:\n    image: mysql:8.0\n    environment:\n      MYSQL_ROOT_PASSWORD: root\n      MYSQL_DATABASE: test_db\n    healthcheck:\n      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]\n      interval: 5s\n      timeout: 3s\n      retries: 5\n\n  redis-test:\n    image: redis:7-alpine\n\n  mock-api:\n    image: wiremock/wiremock:latest\n    volumes:\n      - ./tests/mock-api:/home/wiremock\n
\n\n

O ponto-chave é o uso do WireMock para simular APIs externas. Isso permite testar a integração com serviços que podem estar indisponíveis ou instáveis no ambiente de teste. O WireMock é executado em um contêiner separado e retorna respostas predefinidas com base em arquivos de configuração JSON.

\n\n

Para executar os testes dentro deste ambiente, use o script:

\n\n
#!/bin/bash\ndocker-compose -f docker-compose.test.yml up -d\ndocker-compose -f docker-compose.test.yml exec php-test vendor/bin/phpunit --testsuite=Integration\ndocker-compose -f docker-compose.test.yml down
\n\n

Técnicas avançadas: criação dinâmica de contêineres e execução paralela

\n\n

Quando o projeto cresce, um docker-compose.yml estático pode se tornar um gargalo. É aí que entra a biblioteca Testcontainers (disponível para PHP através do pacote testc

Blogs

Book Recommendations