PHPStorm: integrando Docker + PHPUnit

Fábio J L Ferreira
5 min readSep 11, 2021

--

Utilizo contêineres para praticamente tudo, esse hábito facilita meu dia a dia e poupa muito retrabalho. Sendo assim, quando vou desenvolver algo dentro do ecossistema do PHP, geralmente subo um container, me conecto a ela e começo a utilizar o composer para instalar novas dependências, fazer o autoload e disparar meus testes (Unitários, de integração…). Tudo isso ficou ainda mais simples quando resolvi utilizar a integração do PHPStorm com Docker para rodar os testes de forma mais simples e controlada usando PHPUnit.

❗️Pré-requisitos

Para o pleno aproveitamento desta material é necessário que você tenha familiaridade com as seguintes tecnologias e ferramentas:

  • PHP
  • Docker
  • Docker-compose
  • Composer
  • PHPUnit

👨‍💻 Preparando o ambiente

Irei utilizar o Laravel Framework para agilizar o processo de demonstração, porém não se engane, os passos aqui apresentados podem ser utilizados de forma agnóstica.

Baixando o Laravel

Como falei no inicio deste material, utilizo contêineres para praticamente tudo, ou seja, não tenho o PHP instalado na minha máquina, logo para contornar isso utilizo o Docker. Execute:

docker run \\
--rm \\
-v $(pwd):/app \\
fabiojanio/php:8.0-alpine3.14 composer create-project --prefer-dist laravel/laravel

A instrução acima utiliza minha imagem pública fabiojanio/php:8.0-alpine3.14 para subir um container temporário e executar uma instrução que baixa e instala o Laravel. Ao final do processo o container será automaticamente removido e o terminal liberado.

Subindo a aplicação

Desta vez faremos uso do docker-compose para facilitar nossa vida um pouco mais. Sendo assim, acesse o diretório criado por meio da instrução executada no tópico anterior (caso tenha executado a instrução original este diretório se chama laravel):

cd laravel

Agora crie na raiz do diretório um arquivo chamado docker-compose.yml e adicione este conteúdo a ele:

version: '3'services:
php:
container_name: php
image: fabiojanio/php:8.0-alpine3.14
volumes:
- ./:/app
working_dir: /app
restart: on-failure
user: www-data
ports:
- "8080:80"
command: >
sh -c "php artisan serve --host=0.0.0.0 --port=80"

A configuração acima é uma versão resumida de um exemplo de uso que publiquei no Github: https://github.com/docker-sources/php/blob/master/docker-compose.yml

Para subir nossa aplicação basta executar:

docker-compose up -d

Agora sua aplicação pode ser acessada em http://localhost:8080.

👨‍💻 Configurando PHPStorm para usar Docker + PHPUnit

Abra o projeto no PHPStorm e acesse: PHPStorm > Preferences > PHP > Test Frameworks e clique em + (Add) > PHPUnit by Remote Interpreter:

Configure um novo interpretador clicando nos três pontos (...) e posteriormente em ok:

Clique em + (Add) e posteriormente selecione a opção destacada abaixo:

Caso o campo Server esteja vazio, clique em New e selecione sua versão do Docker, seja ela Docker for Mac, Docker Desktop, etc. O Configuration files será preenchido automaticamente pois nosso projeto já tem um docker-compose.yml, já em Service você irá escolher o container que tem o interpretador PHP, neste caso é o container chamado php. Por fim clique em Ok:

Na tela abaixo marque a opção destacada e clique em OK:

Utilizamos a opção acima para que a IDE tente utilizar a instância atual do container caso ela exista, do contrário irá subir um. Antes de seguirmos, observe que nossa IDE já identificou a versão do PHP da imagem Docker utilizada.

Na próxima janela basta selecionar o interpretador php que acabamos de configurar e clicar em OK:

Não se preocupe caso a versão esteja diferente, isso é irrelevante.

Provavelmente a próxima janela será exibida com todas as configurações já carregadas, porém, caso isso não ocorra você poderá preencher manualmente conforme imagem abaixo e clique em OK:

O /app é o workerdir que está configurado na minha imagem. Caso você esteja utilizando outra imagem ou tenha alterado essa configuração, lembre-se de refletir este ajuste nas configurações acima.

Agora acesse PHPStorm > Preferences > PHP e configure conforme imagem abaixo, posteriormente clique em OK:

A instrução acima é necessário para definir o interpretador padrão que o PHP utilizará para a CLI, caso isso não seja feito você será solicitado a informar que interpretador deseja utilizar toda vez que disparar um teste.

Agora você pode ir no diretório de testes e utilizar a interface para disparar um método de teste, uma classe ou até mesmo todos os testes. Veja esse exemplo:

Essa integração é simples, porém, no dia a dia isso irá poupar seu tempo. Ao invés de digitar instruções para disparar os testes, você pode simplesmente escolher o que testar e pronto.

✌️Conclusão

Explore sua IDE, veja quais recursos ela oferece, quais facilidades e integrações estão disponíveis. É importante saber fazer as coisas na unha utilizando a linha de comando quando estamos aprendendo algo, porém, isso não é muito prático no dia a dia. Busque formas de simplificar sua vida, de integrar as coisas e automatizar ou simplificar rotinas.

Não tenha medo. Explore!

--

--

Fábio J L Ferreira

Arquiteto de software, palestrante e um profundo admirador a filosofia do software livre...