Melhorando는 PHP/Laravel에서 성능 테스트를 수행합니다.

오 문제



Você já se encontrou na situação em que tinha que fazer um deploy ou subir sua atualização 긴급 e teve que ficar esperando os testes terminarem para finalizar pipeline? Nessa hora qualquer minuto é uma eternidade.

Eu estava enfrentando esse problema, meus testes demoravam cerca de 6 minutos para rodar e esse tempo seguia aumentando a cada nova feature entregue.

해결책



Para resolver isso encontrei o pacote Paratest , basicamente, esse pacote adiciona suporte a testes paralelos ao PHPUnit, fazendo com que seus testes rodem simultaneamente.

설치



Primeiro começamos instalando o pacote:

composer require --dev brianium/paratest


Após isso, sua aplicação já tem suporte aos testes em paralelo. 🥳

다음 명령을 사용하여 명령을 내리세요:

vendor/bin/paratest -p4 --runner=WrapperRunner




사용 기회:

-p4

A opção -p é referente ao número de processos simultâneos que irão rodar os testes.



--runner=WrapperRunner

Por padrão, o PHPUnit inicia um novo processo para cada arquivo de testes que irá rodar, utilizando o --runner=WrapperRunner cada processo -p irá iniciar apenas uma vez e manter tudo o que é preciso para rodar todos os arquivos de testes.



Para saber todas as opções disponíveis e ter mais detalhes sobre as usadas aqui, acesse a documentação 파코테.


결과



Paratest는 Paratest와 PHPUnit의 병렬 모드와 비교할 수 없습니다. Serão 646 testes com 75442 asserções, a maioria desses testes sendo de integração, com acesso ao banco de dados e outras dependsências.


순차 고환:

템포 레바도 펠로 PHPUnit은 약 5분 및 39초 동안 고환을 측정해야 합니다. Agora, lembre-se da situação em que você está esperando a pipeline terminar para finalmente fazer um deploy, esses quase quase 6 minutos se tornam uma eternidade.




평행 고환:

Já o tempo levado pelo Paratest foi de aproximadamente 1 minuto e 11 segundos. Um tempo muito melhor para você que está ansioso esperando.



Nem tudo 상 플로레스 😓



Quando estamos trabalhando com paralelismo um grande problema é controlar o acesso de cada processo aos recursos e dados do sistema, e nesse caso não é diferente. Em testes que devem acessar o banco de dados, modificar e Consultar registros pode ocorrer de dois testes acessarem o mesmo dado simultaneamente causando possíveis deadlocks no banco de dados e assim, também, um desses testes acabará falhando.

Uma possível solução para esses casos é o isolamento de cada teste no acesso ao banco de dados. É possível fazer isso rodando os testes dentro de uma transaction assim fazendo com que todos os registros modificados e/ou Consultados estejam isolados e tudo que foi feito pelo teste é desconsiderado após seu termino.



결론



고환이 최종적으로 고환에 도달하기 위해서는 고환이 필요합니다. Para ajudar nesse ponto, a opção de rodar seus testes em paralelo é muito bem vinda, ela está aí para aumentar a performance e produtividade do seu time nos deployments e no dia a dia.

Se você ainda não usou, deveria dar uma chance e vero que você está perdendo (literalmente rs).

폰테스


  • 파라테스트: https://github.com/paratestphp/paratest
  • Laravel 문서: https://laravel.com/docs/8.x/testing#running-tests-in-parallel
  • 좋은 웹페이지 즐겨찾기