⚠️ 本文是過去發表的 「生成AI × Laravel Dusk 進行瀏覽器測試自動化」 的最新版本。
內容、環境建置步驟、影片等資料已更新至2025年10月版。
「想要自動化測試,但寫測試代碼太麻煩...」
「每次UI變更都需要修正測試代碼,太困難了...」
「出現錯誤,無法執行...」
許多開發者可能也有這樣的煩惱吧?本文將介紹如何結合生成AI與Laravel Dusk,讓瀏覽器測試超級有效率。
<代碼生成>
<測試執行>
我們開發了支持Laravel Dusk代碼生成的包。
<iframe id="qiita-embed-content__8b03ab1efcf9c1a65af2d46b070e3801"></iframe>
只要能從瀏覽器訪問測試目標的專案,即可在另外準備的測試環境中執行瀏覽器測試。無需直接在測試目標的Laravel專案中安裝BLOCS Dusk。
composer create-project laravel/laravel dusk-web-test
cd dusk-web-test
composer require --dev blocs/dusk
php artisan dusk:install
php artisan openai:install
php artisan dusk
初次運行時可能會發生錯誤,遇到此情況請再次執行。
OPENAI_API_KEY=your-api-key-here
由於生成測試代碼需要使用LLM,如果您沒有,請獲取OpenAI_API密鑰。如何獲取OPENAI_API密鑰
在生成代碼時,可能會發生以下錯誤。
cURL error 28: Operation timed out after 30002 milliseconds with 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://api.openai.com/v1/chat/completions
Can not generate code
此時,請調整config/openai.php中的request_timeout參數。
默認值為30秒。
'request_timeout' => env('OPENAI_REQUEST_TIMEOUT', 120),
至此,環境建置完成。
與測試相關的目錄結構如下。瀏覽器測試的測試腳本(例如ExampleTest.php)位於tests/Browser目錄下。
dusk-web-test/
├─ config/
│ └─ openai.php
├─ tests/
│ ├─ Browser/
│ │ ├─ ExampleTest.php(測試腳本)
│ │ ├─ ExampleTestTrait.php(測試特性)
│ │ ├─ prompt/
│ │ │ ├─ developer.md
│ │ │ ├─ user.md
│ │ └─ ...(其他目錄省略)
│ ├─ Feature/
│ ├─ Unit/
│ └─ DuskTestCase.php
└─ ...(其他目錄省略)
創建以下的測試特性檔案。在測試特性中用註解指示想要執行的操作。
tests/Browser/ExampleTestTrait.php
<?php
namespace Tests\Browser;
trait ExampleTestTrait
{
private function searchQiita($browser): void
{
// 移動到qiita.com
// 在搜尋框中輸入blocs並按下Enter
// 將搜尋結果按相關性排序
// 打開最上面的文章
}
}
使用BLOCS Dusk生成根據註解指示的操作的代碼。執行BLOCS Dusk時會顯示命令選擇界面。(可用↑↓選擇。)
php artisan blocs:dusk tests/Browser/ExampleTestTrait.php
命令 | 說明 |
---|---|
searchQiita等 | 選擇生成代碼的操作函數 |
quit | 結束 |
將在每步驟中確認瀏覽器中的動作,然後生成代碼。首先,自動生成註解指示的操作內容的代碼,然後選擇自動生成的代碼的命令。生成所有步驟的代碼並在瀏覽器中進行確認,完成測試特性。
命令 | 說明 |
---|---|
execute | 在瀏覽器中執行生成的代碼並更新測試特性 |
update | 不執行生成的代碼而更新測試特性 |
skip | 跳過此步驟 |
quit | 結束自動生成 |
創建以下的測試腳本檔案。在測試腳本中調用測試特性,並用註解指示想要執行的場景。
tests/Browser/ExampleTest.php
<?php
namespace Tests\Browser;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class ExampleTest extends DuskTestCase
{
use ExampleTestTrait;
public function testQiita(): void
{
$this->browse(function (Browser $browser) {
// 在Qiita上搜尋blocs
});
}
}
利用Cursor或GitHub Copilot等代理創建測試腳本。
執行此命令將執行測試腳本。Laravel Dusk預設在背景中運行測試,不顯示畫面。如果您希望在瀏覽器中確認操作,請加上--browse選項。
php artisan dusk --browse tests/Browser/ExampleTest.php
本文介紹了利用Laravel Dusk進行瀏覽器測試的高效率工具。如果您有興趣,請務必試試看!
我們公司也在開發能讓Laravel開發更加方便的模板引擎。