メインコンテンツへスキップ

Webサーバー

はじめに

Playwrightは、設定ファイルにwebserverオプションを備えており、テストを実行する前にローカル開発サーバーを起動する機能を提供します。これは、開発中にテストを作成する場合や、テスト対象のステージングまたは本番URLがない場合に最適です。

Webサーバーの構成

テスト中に開発Webサーバーを起動するには、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: 'https://:3000',
reuseExistingServer: !process.env.CI,
stdout: 'ignore',
stderr: 'pipe',
},
});
プロパティ説明
testConfig.webServerテスト中に開発Webサーバー (または複数) を起動します。
commandアプリのローカル開発サーバーを起動するためのシェルコマンドです。
cwd生成されたプロセスの現在の作業ディレクトリです。デフォルトは設定ファイルのディレクトリです。
envコマンドに設定する環境変数です。デフォルトはprocess.envです。
gracefulShutdownプロセスをシャットダウンする方法です。指定しない場合、プロセスグループは強制的にSIGKILLされます。{ signal: 'SIGTERM', timeout: 500 }に設定すると、プロセスグループにSIGTERMシグナルが送信され、500ms以内に終了しない場合はSIGKILLが続きます。代わりにSIGINTをシグナルとして使用することもできます。タイムアウトを0にすると、SIGKILLは送信されません。WindowsはSIGTERMおよびSIGINTシグナルをサポートしていないため、このオプションはWindowsでは無視されます。DockerコンテナをシャットダウンするにはSIGTERMが必要であることに注意してください。
ignoreHTTPSErrorsurlをフェッチする際にHTTPSエラーを無視するかどうか。デフォルトはfalseです。
nameWebサーバーのカスタム名を指定します。この名前はログメッセージのプレフィックスとして使用されます。デフォルトは[WebServer]です。
reuseExistingServertrueの場合、URLで既存のサーバーが利用可能であればそれを再利用します。そのURLでサーバーが実行されていない場合は、コマンドを実行して新しいサーバーを起動します。falseの場合、既存のプロセスがURLでリッスンしているとエラーをスローします。標準出力を見るには、DEBUG=pw:webserver環境変数を設定してください。
stderrコマンドの標準エラーをプロセスの標準エラーにパイプするか、無視するか。デフォルトは"pipe"です。
stdout"pipe"の場合、コマンドの標準出力をプロセスの標準出力にパイプします。"ignore"の場合、コマンドの標準出力を無視します。デフォルトは"ignore"です。
timeoutプロセスが起動して利用可能になるまで待機する時間 (ミリ秒単位)。デフォルトは60000です。
urlサーバーが接続を受け入れる準備ができたときに、2xx、3xx、400、401、402、または403のステータスコードを返すことが期待されるHTTPサーバーのURLです。

サーバータイムアウトの追加

Webサーバーは起動に時間がかかる場合があります。この場合、サーバーの起動を待つタイムアウトを増やすことができます。

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: 'https://:3000',
reuseExistingServer: !process.env.CI,
timeout: 120 * 1000,
},
});

baseURLの追加

また、テストで相対URLを使用できるように、設定のuse: {}セクションでbaseURLを指定することをお勧めします。これにより、完全なURLを繰り返し指定する必要がなくなります。

page.goto()page.route()page.waitForURL()page.waitForRequest()、またはpage.waitForResponse()を使用する場合、対応するURLを構築するためにURL()コンストラクタを使用してベースURLが考慮されます。例えば、baseURLをhttps://:3000に設定し、テストで/loginにナビゲートすると、Playwrightはhttps://: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: 'https://:3000',
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'https://:3000',
},
});

これで、ページをナビゲートする際に相対パスを使用できます。

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

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

複数のWebサーバー

複数のWebサーバー(またはバックグラウンドプロセス)は、webServer設定の配列を提供することで同時に起動できます。詳細はtestConfig.webServerを参照してください。

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

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