SpeedTrap 直接在控制台中報告運行緩慢的 PHPUnit 測試。
許多因素會影響測試執行時間。未正確隔離可變延遲(資料庫、網路等)的測試,甚至測試機器上的基本負載都會導致測試執行時間波動。
SpeedTrap 有助於識別緩慢的測試,但無法解釋這些測試緩慢的原因。考慮使用 Blackfire.io 來分析測試套件以專門識別緩慢的程式碼。
SpeedTrap 使用 Composer 安裝。將其新增為require-dev
依賴項:
composer require --dev johnkary/phpunit-speedtrap
透過將以下程式碼新增至專案的phpunit.xml
檔案中來啟用所有預設值:
<phpunit bootstrap="vendor/autoload.php"> … <副檔名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </擴展名> </phpunit>
現在運行測試套件。如果一項或多項測試執行超過緩慢閾值(預設為 500 毫秒),SpeedTrap 將在所有測試完成後在控制台中報告這些測試。
SpeedTrap 也支援以下參數:
SlowThreshold - 測試被視為「慢」時的毫秒數(預設值:500ms)
reportLength - 報告中包含的慢速測驗數量(預設值:10 個測驗)
每個參數都在phpunit.xml
中設定:
<phpunit bootstrap="vendor/autoload.php"><!-- ...其他套件配置在這裡... --><extensions> <擴充類別=“JohnKaryPHPUnitExtensionSpeedTrap”> <參數> <數組> <元素鍵=“慢閾值”> <整數>500</整數> </元素> <元素鍵=“報告長度”> <整數>10</整數> </元素> </數組> </參數> </擴展名> </擴展名> </phpunit>
有些專案有一些複雜的測試,需要很長時間才能運行。可以為各個測試用例設定不同的慢度閾值。
註解@slowThreshold
可以為每個測試案例設定自訂的慢度閾值。該數字可能高於或低於預設閾值,並且用於取代該特定測試的預設閾值。
類別 SomeTestCase 擴充 PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */公用函數 testLongRunningProcess() {// 執行時間較長的程式碼} }
設定@slowThreshold 0
永遠不會將該測試報告為慢。
在 phpunit.xml 中啟用時,用於緩慢測試的 SpeedTrap 設定檔。但是使用名為PHPUNIT_SPEEDTRAP
的環境變數可以啟用或停用該擴充:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI 很流行將新程式碼推送到儲存庫後在雲端中運行測試。
步驟 1) 在 phpunit.xml 中啟用 SpeedTrap,但設定PHPUNIT_SPEEDTRAP="disabled"
以在執行測試時停用分析。
<phpunit bootstrap="vendor/autoload.php"> … <php> <env name="PHPUNIT_SPEEDTRAP" value="禁用" /> </php> <副檔名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </擴展名> </phpunit>
步驟 2) 使用PHPUNIT_SPEEDTRAP="enabled"
配置.travis.yml
,以分析在 Travis CI 上運行時的緩慢測試:
語言: php php: - 7.3環境: - PHPUNIT_SPEEDTRAP="啟用"
步驟 3) 檢視 Travis CI 建置輸出並閱讀控制台中列印的緩慢度報告。
Travis CI 文件 - 環境變數
步驟 1) 在 phpunit.xml 中啟用 SpeedTrap。緩慢報告將在所有測試套件執行期間輸出。
<phpunit bootstrap="vendor/autoload.php"> … <副檔名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </擴展名> </phpunit>
步驟 2) 使用PHPUNIT_SPEEDTRAP="disabled"
配置.travis.yml
以在 Travis CI 上運行時關閉分析:
語言: php php: - 7.3環境: - PHPUNIT_SPEEDTRAP="停用"
步驟 3) 檢視 Travis CI 建置輸出並確認控制台中未列印速度慢報告。
當您只想偶爾分析一次緩慢的測試時很有用。
步驟 1) 設定 phpunit.xml 以啟用 SpeedTrap,但透過設定PHPUNIT_SPEEDTRAP="disabled"
來停用慢速分析,如下所示:
<phpunit bootstrap="vendor/autoload.php"> … <php> <env name="PHPUNIT_SPEEDTRAP" value="禁用" /> </php> <副檔名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </擴展名> </phpunit>
步驟 2) 從命令列執行phpunit
時,僅透過傳遞環境變數PHPUNIT_SPEEDTRAP="enabled"
來啟用慢速分析,如下所示:
$ PHPUNIT_SPEEDTRAP=啟用 ./vendor/bin/phpunit
Symfony 框架附帶了 symfony/phpunit-bridge 套件,它會安裝自己版本的 PHPUnit 並忽略專案的composer.json 或composer.lock 檔案中定義的內容。使用指令ls vendor/bin/.phpunit/
檢視它安裝的 PHPUnit 版本
symfony/phpunit-bridge 允許環境變數SYMFONY_PHPUNIT_REQUIRE
在安裝 phpunit 時定義其他依賴項。
為simple-phpunit
腳本設定環境變數最簡單的方法是透過 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> <副檔名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </擴展名> </phpunit>
使用上面的範例,運行vendor/bin/simple-phpunit
現在將安裝最新的 PHPUnit 9 並需要最新的 phpunit-speedtrap v4。
請按照以下步驟添加新功能或開發您自己的分叉:
# 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 的靈感來自 RSpec 的--profile
選項,該選項顯示有關緩慢測試的回饋。
phpunit-speedtrap 可在 MIT 許可證下使用。