如何解決PHP項目測試時間過長的問題?使用liuggio/fastest可以!

可以通過一下地址學習composer學習地址

php項目開發過程中,測試時間過長是一個常見的問題,特別是對于功能測試。測試時間長達30分鐘,這不僅影響了開發效率,也讓每次提交變得異常緩慢。在嘗試了多種方法后,我發現了liuggio/fastest這個工具,它大大縮短了我的測試時間,將原本30分鐘的測試時間縮減到了7分鐘。

liuggio/fastest是一個簡單而強大的工具,專門用于并行執行測試。它可以根據計算機的核心數自動創建多個進程,從而并行運行測試,顯著提高測試速度。以下是如何使用liuggio/fastest來解決測試時間過長的問題:

安裝liuggio/fastest

使用composer安裝非常簡單,只需運行以下命令:

composer require --dev 'liuggio/fastest:^1.6'

配置和使用

liuggio/fastest可以與任何測試工具結合使用,例如PHPUnit或Behat。以下是幾種常見的使用方法:

使用ls命令

ls -d test/* | ./vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit {};"

使用find命令

find tests/ -name "*Test.php" | ./vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit {};"

使用phpunit.xml.dist文件

./vendor/liuggio/fastest/fastest -x phpunit.xml.dist "vendor/phpunit/phpunit/phpunit {};"

處理功能測試和數據庫

對于功能測試,liuggio/fastest提供了環境變量,使得每個并行進程可以使用不同的數據庫。這對于需要并行運行的測試非常有用。例如:

立即學習PHP免費學習筆記(深入)”;

echo getenv('ENV_TEST_CHANNEL');          // 當前通道號 echo getenv('ENV_TEST_CHANNEL_READABLE'); // 可讀的數據庫名稱 echo getenv('ENV_TEST_CHANNELS_NUMBER');  // 最大通道數 echo getenv('ENV_TEST_ARGUMENT');         // 當前運行的測試文件 echo getenv('ENV_TEST_INC_NUMBER');       // 當前測試的唯一編號 echo getenv('ENV_TEST_IS_FIRST_ON_CHANNEL'); // 是否是通道上的第一個測試

在測試前執行腳本

你還可以使用-b選項在測試前運行腳本,例如初始化數據庫 schema 或加載 fixtures:

find tests/ -name "*Test.php" | ./vendor/liuggio/fastest/fastest -b"app/console doc:sch:create -e test" "vendor/phpunit/phpunit/phpunit {};";

生成和合并代碼覆蓋率

liuggio/fastest還支持生成并合并代碼覆蓋率報告:

# 安裝phpcov composer require --dev phpunit/phpcov  # 創建覆蓋率文件目錄 mkdir -p cov/fastest/  # 生成覆蓋率文件 find tests/ -name "*Test.php" | vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit -c app {} --coverage-php cov/fastest/{n}.cov;"  # 合并覆蓋率文件 phpcov merge cov/fastest/ --html cov/merge/fastest/

瀏覽器測試支持

對于基于瀏覽器的測試(如Selenium或Mink),liuggio/fastest提供了設置環境變量的方法,以便正確選擇數據庫:

  1. 在測試開始時設置Cookie、GET參數或http頭部。
  2. 在應用入口點配置環境變量。

總結

使用liuggio/fastest顯著提高了我的PHP項目的測試效率。通過并行執行測試,我將測試時間從30分鐘縮短到了7分鐘,這極大地提升了開發和迭代的速度。如果你也在為測試時間過長而苦惱,不妨嘗試一下liuggio/fastest這個強大的工具。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享