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.
- O Laravel disponibiliza a Trait DatabaseTransactions, com ela no seu TestCase (classe na qual seus testes irão extender), seus testes irão por padrão rodar dentro de uma transaction.
- Caso use SQLServer, outra possível solução é habilitar a opção READ_COMMITTED_SNAPSHOT, ela ajuda com esses casos de dados sendo acessados e modificados simultanemente. Para mais detalhes acesse: https://www.mssqltips.com/sqlservertip/6368/sql-server-readcommittedsnapshot-database-option-and-read-commited-transaction-isolation-level/
- Observação: no meu caso as duas opções foram usadas.
결론
고환이 최종적으로 고환에 도달하기 위해서는 고환이 필요합니다. 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
Reference
이 문제에 관하여(Melhorando는 PHP/Laravel에서 성능 테스트를 수행합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/pedropms/melhorando-a-performance-dos-seus-testes-em-php-laravel-3kip
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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.
- O Laravel disponibiliza a Trait DatabaseTransactions, com ela no seu TestCase (classe na qual seus testes irão extender), seus testes irão por padrão rodar dentro de uma transaction.
- Caso use SQLServer, outra possível solução é habilitar a opção READ_COMMITTED_SNAPSHOT, ela ajuda com esses casos de dados sendo acessados e modificados simultanemente. Para mais detalhes acesse: https://www.mssqltips.com/sqlservertip/6368/sql-server-readcommittedsnapshot-database-option-and-read-commited-transaction-isolation-level/
- Observação: no meu caso as duas opções foram usadas.
결론
고환이 최종적으로 고환에 도달하기 위해서는 고환이 필요합니다. 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
Reference
이 문제에 관하여(Melhorando는 PHP/Laravel에서 성능 테스트를 수행합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pedropms/melhorando-a-performance-dos-seus-testes-em-php-laravel-3kip텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)