SpeedTrap signale les tests PHPUnit à exécution lente directement dans la console.
De nombreux facteurs affectent le temps d’exécution des tests. Un test mal isolé de la latence variable (base de données, réseau, etc.) et même de la charge de base sur la machine de test entraînera des fluctuations dans les temps d'exécution des tests.
SpeedTrap aide à identifier les tests lents mais ne peut pas expliquer pourquoi ces tests sont lents. Pensez à utiliser Blackfire.io pour profiler la suite de tests afin d'identifier spécifiquement le code lent.
SpeedTrap est installé à l'aide de Composer. Ajoutez-le en tant que dépendance require-dev
:
composer require --dev johnkary/phpunit-speedtrap
Activez avec toutes les valeurs par défaut en ajoutant le code suivant au fichier phpunit.xml
de votre projet :
<phpunit bootstrap="vendor/autoload.php"> ... <extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunité>
Exécutez maintenant la suite de tests. Si une ou plusieurs exécutions de tests dépassent le seuil de lenteur (500 ms par défaut), SpeedTrap rendra compte de ces tests dans la console une fois tous les tests terminés.
SpeedTrap prend également en charge ces paramètres :
slowThreshold - Nombre de millisecondes pendant lesquelles un test est considéré comme « lent » (par défaut : 500 ms)
reportLength - Nombre de tests lents inclus dans le rapport (par défaut : 10 tests)
Chaque paramètre est défini dans phpunit.xml
:
<phpunit bootstrap="vendor/autoload.php"><!-- ... autre configuration de la suite ici ... --><extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap"> <arguments> <tableau> <element key="slowThreshold"> <entier>500</entier> </élément> <element key="reportLength"> <entier>10</entier> </élément> </tableau> </arguments> </extension> </extensions> </phpunité>
Certains projets comportent quelques tests complexes qui prennent beaucoup de temps à s'exécuter. Il est possible de définir un seuil de lenteur différent pour des cas de test individuels.
L'annotation @slowThreshold
peut définir un seuil de lenteur personnalisé pour chaque cas de test. Ce nombre peut être supérieur ou inférieur au seuil par défaut et est utilisé à la place du seuil par défaut pour ce test spécifique.
la classe SomeTestCase étend PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */fonction publique testLongRunningProcess() {// Code plus long à exécuter} }
La définition de @slowThreshold 0
ne signalera jamais ce test comme lent.
Profils SpeedTrap pour les tests lents lorsqu'ils sont activés dans phpunit.xml. Mais l'utilisation d'une variable d'environnement nommée PHPUNIT_SPEEDTRAP
peut activer ou désactiver l'extension :
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI est populaire pour exécuter des tests dans le cloud après avoir poussé un nouveau code vers un référentiel.
Étape 1) Activez SpeedTrap dans phpunit.xml, mais définissez PHPUNIT_SPEEDTRAP="disabled"
pour désactiver le profilage lors de l'exécution de tests.
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunité>
Étape 2) Configurez .travis.yml
avec PHPUNIT_SPEEDTRAP="enabled"
pour profiler les tests lents lors de l'exécution sur Travis CI :
langage : phpphp : - 7.3env : - PHPUNIT_SPEEDTRAP="activé"
Étape 3) Affichez la sortie de la build Travis CI et lisez le rapport de lenteur imprimé dans la console.
Documentation Travis CI - Variables d'environnement
Étape 1) Activez SpeedTrap dans phpunit.xml. Le rapport de lenteur sera affiché lors de toutes les exécutions de la suite de tests.
<phpunit bootstrap="vendor/autoload.php"> ... <extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunité>
Étape 2) Configurez .travis.yml
avec PHPUNIT_SPEEDTRAP="disabled"
pour désactiver le profilage lors de l'exécution sur Travis CI :
langage : phpphp : - 7.3env : - PHPUNIT_SPEEDTRAP="désactivé"
Étape 3) Affichez la sortie de la build Travis CI et confirmez que le rapport de lenteur n'est pas imprimé dans la console.
Utile lorsque vous souhaitez uniquement profiler des tests lents de temps en temps.
Étape 1) Configurez phpunit.xml pour activer SpeedTrap, mais désactivez le profilage de lenteur en définissant PHPUNIT_SPEEDTRAP="disabled"
comme ceci :
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunité>
Étape 2) Lors de l'exécution phpunit
à partir de la ligne de commande, activez le profilage de lenteur uniquement pour cette exécution en passant la variable d'environnement PHPUNIT_SPEEDTRAP="enabled"
comme ceci :
$ PHPUNIT_SPEEDTRAP=activé ./vendor/bin/phpunit
Symfony Framework est livré avec le package symfony/phpunit-bridge qui installe sa propre version de PHPUnit et ignore ce qui est défini dans le fichier composer.json ou composer.lock de votre projet. Voir les versions de PHPUnit qu'il installe avec la commande ls vendor/bin/.phpunit/
symfony/phpunit-bridge permet à la variable d'environnement SYMFONY_PHPUNIT_REQUIRE
de définir des dépendances supplémentaires lors de l'installation de phpunit.
Le moyen le plus simple de définir les variables d'environnement pour le script simple-phpunit
est 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" value="9"/> </php> <extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunité>
En utilisant l'exemple ci-dessus, l'exécution vendor/bin/simple-phpunit
installera désormais la dernière version de PHPUnit 9 et nécessitera la dernière version de phpunit-speedtrap v4.
Suivez ces étapes pour ajouter de nouvelles fonctionnalités ou développer votre propre 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
SpeedTrap a été inspiré par l'option --profile
de RSpec qui affiche des commentaires sur les tests lents.
phpunit-speedtrap est disponible sous la licence MIT.