SpeedTrap meldet direkt in der Konsole langsam laufende PHPUnit-Tests.
Viele Faktoren beeinflussen die Testausführungszeit. Ein Test, der nicht ordnungsgemäß von der variablen Latenz (Datenbank, Netzwerk usw.) und sogar der Grundlast des Testcomputers isoliert ist, führt zu schwankenden Testausführungszeiten.
SpeedTrap hilft bei der Identifizierung langsamer Tests , kann jedoch nicht erklären, warum diese Tests langsam sind. Erwägen Sie die Verwendung von Blackfire.io zur Profilierung der Testsuite, um langsamen Code gezielt zu identifizieren.
SpeedTrap wird mit Composer installiert. Fügen Sie es als require-dev
Abhängigkeit hinzu:
composer require --dev johnkary/phpunit-speedtrap
Aktivieren Sie alle Standardeinstellungen, indem Sie den folgenden Code zur Datei phpunit.xml
Ihres Projekts hinzufügen:
<phpunit bootstrap="vendor/autoload.php"> ... <Erweiterungen> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunit>
Führen Sie nun die Testsuite aus. Wenn eine oder mehrere Testausführungen den Langsamkeitsschwellenwert (standardmäßig 500 ms) überschreiten, meldet SpeedTrap diese Tests in der Konsole, nachdem alle Tests abgeschlossen sind.
SpeedTrap unterstützt auch diese Parameter:
slowThreshold – Anzahl der Millisekunden, in denen ein Test als „langsam“ gilt (Standard: 500 ms)
reportLength – Anzahl der im Bericht enthaltenen langsamen Tests (Standard: 10 Tests)
Jeder Parameter wird in phpunit.xml
festgelegt:
<phpunit bootstrap="vendor/autoload.php"><!-- ... andere Suite-Konfiguration hier ... --><extensions> <extension class="JohnKaryPHPUnitExtensionSpeedTrap"> <Argumente> <array> <element key="slowThreshold"> <integer>500</integer> </element> <element key="reportLength"> <integer>10</integer> </element> </array> </arguments> </extension> </extensions> </phpunit>
Einige Projekte umfassen einige komplexe Tests, deren Ausführung viel Zeit in Anspruch nimmt. Es ist möglich, für einzelne Testfälle eine unterschiedliche Langsamkeitsschwelle festzulegen.
Die Annotation @slowThreshold
kann für jeden Testfall einen benutzerdefinierten Langsamkeitsschwellenwert festlegen. Diese Zahl kann höher oder niedriger als der Standardschwellenwert sein und wird anstelle des Standardschwellenwerts für diesen bestimmten Test verwendet.
Die Klasse SomeTestCase erweitert PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */public function testLongRunningProcess() {// Code, dessen Ausführung länger dauert} }
Wenn Sie @slowThreshold 0
setzen, wird dieser Test nie als langsam gemeldet.
SpeedTrap-Profile für langsame Tests, wenn sie in phpunit.xml aktiviert sind. Aber die Verwendung einer Umgebungsvariablen namens PHPUNIT_SPEEDTRAP
kann die Erweiterung aktivieren oder deaktivieren:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI wird häufig zum Ausführen von Tests in der Cloud verwendet, nachdem neuer Code in ein Repository übertragen wurde.
Schritt 1) Aktivieren Sie SpeedTrap in phpunit.xml, aber setzen Sie PHPUNIT_SPEEDTRAP="disabled"
um die Profilerstellung beim Ausführen von Tests zu deaktivieren.
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <Erweiterungen> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunit>
Schritt 2) Konfigurieren Sie .travis.yml
mit PHPUNIT_SPEEDTRAP="enabled"
um ein Profil für langsame Tests zu erstellen, wenn es auf Travis CI ausgeführt wird:
Sprache: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP="aktiviert"
Schritt 3) Sehen Sie sich die Build-Ausgabe von Travis CI an und lesen Sie den in der Konsole gedruckten Langsamkeitsbericht.
Travis CI-Dokumentation – Umgebungsvariablen
Schritt 1) Aktivieren Sie SpeedTrap in phpunit.xml. Der Langsamkeitsbericht wird während aller Testsuite-Ausführungen ausgegeben.
<phpunit bootstrap="vendor/autoload.php"> ... <Erweiterungen> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunit>
Schritt 2) Konfigurieren Sie .travis.yml
mit PHPUNIT_SPEEDTRAP="disabled"
um die Profilerstellung bei der Ausführung auf Travis CI zu deaktivieren:
Sprache: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP="deaktiviert"
Schritt 3) Sehen Sie sich die Travis CI-Build-Ausgabe an und stellen Sie sicher, dass der Langsamkeitsbericht nicht in der Konsole gedruckt wird.
Nützlich, wenn Sie langsame Tests nur ab und zu profilieren möchten.
Schritt 1) Richten Sie phpunit.xml ein, um SpeedTrap zu aktivieren, aber deaktivieren Sie die Langsamkeitsprofilierung, indem Sie PHPUNIT_SPEEDTRAP="disabled"
wie folgt festlegen:
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <Erweiterungen> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunit>
Schritt 2) Wenn Sie phpunit
über die Befehlszeile ausführen, aktivieren Sie die Langsamkeitsprofilierung nur für diese Ausführung, indem Sie die Umgebungsvariable PHPUNIT_SPEEDTRAP="enabled"
wie folgt übergeben:
$ PHPUNIT_SPEEDTRAP=enabled ./vendor/bin/phpunit
Symfony Framework wird mit dem Paket symfony/phpunit-bridge geliefert, das seine eigene Version von PHPUnit installiert und ignoriert, was in der Datei „composer.json“ oder „composer.lock“ Ihres Projekts definiert ist. Sehen Sie sich die PHPUnit-Versionen an, die mit dem Befehl ls vendor/bin/.phpunit/
installiert werden.
symfony/phpunit-bridge ermöglicht der Umgebungsvariablen SYMFONY_PHPUNIT_REQUIRE
zusätzliche Abhängigkeiten während der Installation von phpunit zu definieren.
Der einfachste Weg, Umgebungsvariablen für das Skript simple-phpunit
festzulegen, ist über 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> <Erweiterungen> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </extensions> </phpunit>
Anhand des obigen Beispiels installiert die Ausführung vendor/bin/simple-phpunit
nun die neueste Version von PHPUnit 9 und erfordert die neueste Version von phpunit-speedtrap v4.
Befolgen Sie diese Schritte, um neue Funktionen hinzuzufügen oder Ihren eigenen Fork zu entwickeln:
# 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 wurde von der Option --profile
von RSpec inspiriert, die Feedback zu langsamen Tests anzeigt.
phpunit-speedtrap ist unter der MIT-Lizenz verfügbar.