跳到主要內容

網站伺服器

簡介

Playwright 在設定檔中帶有一個 webserver 選項,讓您能夠在執行測試之前啟動本機開發伺服器。這非常適合在開發期間編寫測試,以及當您沒有預備或正式環境網址可供測試時。

設定網站伺服器

在您的 Playwright 設定中使用 webserver 屬性,以便在測試期間啟動開發網站伺服器。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Run your local dev server before starting the tests
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
reuseExistingServer: !process.env.CI,
stdout: 'ignore',
stderr: 'pipe',
},
});
屬性描述
testConfig.webServer在測試期間啟動開發網站伺服器 (或多個)。
command啟動應用程式本機開發伺服器的 Shell 命令。
url您的 http 伺服器的 URL,預期在伺服器準備好接受連線時傳回 2xx、3xx、400、401、402 或 403 狀態碼。
reuseExistingServer如果為 true,則在可用時重複使用網址上現有的伺服器。如果該網址上沒有伺服器正在執行,它將執行命令以啟動新的伺服器。如果為 false,如果現有程序正在網址上接聽,則會擲回錯誤。若要查看 stdout,您可以設定 DEBUG=pw:webserver 環境變數。
ignoreHTTPSErrors擷取 url 時是否忽略 HTTPS 錯誤。預設為 false
cwd產生程序的目前工作目錄,預設為設定檔的目錄。
stdout如果為 "pipe",它會將命令的 stdout 導向程序 stdout。如果為 "ignore",它會忽略命令的 stdout。預設為 "ignore"
stderr是否將命令的 stderr 導向程序 stderr 或忽略它。預設為 "pipe"
timeout等待程序啟動並可用的時間長度,以毫秒為單位。預設為 60000。
gracefulShutdown如何關閉程序。如果未指定,程序群組會被強制 SIGKILL 終止。如果設定為 { signal: 'SIGTERM', timeout: 500 },則會向程序群組傳送 SIGTERM 信號,如果未在 500 毫秒內結束,則接著傳送 SIGKILL。您也可以使用 SIGINT 作為信號。0 逾時表示不會傳送 SIGKILL。Windows 不支援 SIGTERMSIGINT 信號,因此在 Windows 上會忽略此選項。請注意,關閉 Docker 容器需要 SIGTERM

新增伺服器逾時

網站伺服器有時可能需要較長時間才能啟動。在這種情況下,您可以增加逾時時間以等待伺服器啟動。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Rest of your config...

// Run your local dev server before starting the tests
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
reuseExistingServer: !process.env.CI,
timeout: 120 * 1000,
},
});

新增 baseURL

也建議在您設定的 use: {} 區段中指定 baseURL,以便測試可以使用相對網址,而您不必一遍又一遍地指定完整 URL。

當使用 page.goto()page.route()page.waitForURL()page.waitForRequest()page.waitForResponse() 時,它會透過使用 URL() 建構函式來建構對應的 URL,從而考量基準 URL。例如,透過將 baseURL 設定為 http://127.0.0.1:3000 並在您的測試中導航至 /login,Playwright 將使用 http://127.0.0.1:3000/login 執行測試。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Rest of your config...

// Run your local dev server before starting the tests
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'http://127.0.0.1:3000',
},
});

現在您可以在導航頁面時使用相對路徑

test.spec.ts
import { test } from '@playwright/test';

test('test', async ({ page }) => {
// This will navigate to http://127.0.0.1:3000/login
await page.goto('./login');
});

多個網站伺服器

可以透過提供 webServer 設定的陣列同時啟動多個網站伺服器 (或背景程序)。請參閱 testConfig.webServer 以取得更多資訊。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'http://127.0.0.1:3333',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'http://127.0.0.1:3000',
},
});