O SpeedTrap relata testes PHPUnit de execução lenta diretamente no console.
Muitos fatores afetam o tempo de execução do teste. Um teste não devidamente isolado da latência variável (banco de dados, rede, etc.) e até mesmo da carga básica na máquina de teste fará com que os tempos de execução do teste flutuem.
O SpeedTrap ajuda a identificar testes lentos , mas não consegue explicar por que esses testes são lentos. Considere usar o Blackfire.io para criar o perfil do conjunto de testes para identificar especificamente o código lento.
SpeedTrap é instalado usando o Composer. Adicione-o como uma dependência require-dev
:
composer require --dev johnkary/phpunit-speedtrap
Habilite com todos os padrões adicionando o seguinte código ao arquivo phpunit.xml
do seu projeto:
<phpunit bootstrap="vendor/autoload.php"> ... <extensões> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensões> </phpunit>
Agora execute o conjunto de testes. Se uma ou mais execuções de teste excederem o limite de lentidão (500 ms por padrão), o SpeedTrap reportará esses testes no console após a conclusão de todos os testes.
SpeedTrap também oferece suporte a estes parâmetros:
slowThreshold - Número de milissegundos quando um teste é considerado "lento" (Padrão: 500ms)
reportLength – Número de testes lentos incluídos no relatório (Padrão: 10 testes)
Cada parâmetro é definido em phpunit.xml
:
<phpunit bootstrap="vendor/autoload.php"><!-- ... outra configuração de suíte aqui ... --><extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap"> <argumentos> <matriz> <element key="slowThreshold"> <inteiro>500</inteiro> </elemento> <element key="reportLength"> <inteiro>10</inteiro> </elemento> </array> </argumentos> </extensão> </extensões> </phpunit>
Alguns projetos possuem alguns testes complexos que demoram muito para serem executados. É possível definir um limite de lentidão diferente para casos de teste individuais.
A anotação @slowThreshold
pode definir um limite de lentidão personalizado para cada caso de teste. Este número pode ser maior ou menor que o limite padrão e é usado em vez do limite padrão para esse teste específico.
classe SomeTestCase estende PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */função pública testLongRunningProcess() {// Código que leva mais tempo para ser executado} }
Definir @slowThreshold 0
nunca reportará esse teste como lento.
Perfis SpeedTrap para testes lentos quando habilitados em phpunit.xml. Mas usar uma variável de ambiente chamada PHPUNIT_SPEEDTRAP
pode ativar ou desativar a extensão:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI é popular para executar testes na nuvem após enviar novo código para um repositório.
Etapa 1) Habilite o SpeedTrap em phpunit.xml, mas defina PHPUNIT_SPEEDTRAP="disabled"
para desabilitar a criação de perfil ao executar testes.
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" valor="desativado" /> </php> <extensões> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensões> </phpunit>
Etapa 2) Configure .travis.yml
com PHPUNIT_SPEEDTRAP="enabled"
para criar um perfil para testes lentos ao executar no Travis CI:
idioma: phpphp: -7.3env: - PHPUNIT_SPEEDTRAP = "habilitado"
Etapa 3) Visualize a saída da compilação do Travis CI e leia o relatório de lentidão impresso no console.
Documentação do Travis CI - Variáveis de ambiente
Etapa 1) Habilite o SpeedTrap em phpunit.xml. O relatório de lentidão será gerado durante todas as execuções do conjunto de testes.
<phpunit bootstrap="vendor/autoload.php"> ... <extensões> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensões> </phpunit>
Etapa 2) Configure .travis.yml
com PHPUNIT_SPEEDTRAP="disabled"
para desativar o perfil ao executar no Travis CI:
idioma: phpphp: -7.3env: - PHPUNIT_SPEEDTRAP = "desativado"
Etapa 3) Visualize a saída da compilação do Travis CI e confirme se o relatório de lentidão não foi impresso no console.
Útil quando você deseja criar perfis de testes lentos apenas de vez em quando.
Etapa 1) Configure o phpunit.xml para ativar o SpeedTrap, mas desative o perfil de lentidão configurando PHPUNIT_SPEEDTRAP="disabled"
assim:
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" valor="desativado" /> </php> <extensões> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensões> </phpunit>
Etapa 2) Ao executar phpunit
a partir da linha de comando, habilite o perfil de lentidão apenas para esta execução, passando a variável de ambiente PHPUNIT_SPEEDTRAP="enabled"
assim:
$ PHPUNIT_SPEEDTRAP = habilitado./vendor/bin/phpunit
Symfony Framework vem com o pacote symfony/phpunit-bridge que instala sua própria versão do PHPUnit e ignora o que está definido no arquivo compositor.json ou compositor.lock do seu projeto. Veja as versões do PHPUnit que ele instala com o comando ls vendor/bin/.phpunit/
symfony/phpunit-bridge permite que a variável de ambiente SYMFONY_PHPUNIT_REQUIRE
defina dependências adicionais durante a instalação do phpunit.
A maneira mais fácil de definir variáveis de ambiente para o script simple-phpunit
é via phpunit.xml.dist:
<phpunit bootstrap="vendor/autoload.php"> <php> <env name="SYMFONY_PHPUNIT_REQUIRE" value="johnkary/phpunit-speedtrap:^4"/> <env name="SYMFONY_PHPUNIT_VERSION" valor="9"/> </php> <extensões> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensões> </phpunit>
Usando o exemplo acima, executar vendor/bin/simple-phpunit
agora instalará o PHPUnit 9 mais recente e exigirá o phpunit-speedtrap v4 mais recente.
Siga estas etapas para adicionar novos recursos ou desenvolver seu próprio fork:
# Get source code (or replace with your fork URL) $ git checkout https://github.com/johnkary/phpunit-speedtrap.git phpunit-speedtrap # Install dev dependencies $ cd phpunit-speedtrap $ composer install # Run test suite to verify code runs as expected $ vendor/bin/phpunit
O SpeedTrap foi inspirado na opção --profile
do RSpec, que exibe feedback sobre testes lentos.
phpunit-speedtrap está disponível sob a licença MIT.