分離
はじめに
Playwrightで記述されたテストは、ブラウザコンテキストと呼ばれる隔離されたクリーンな環境で実行されます。この隔離モデルは、再現性を向上させ、連鎖的なテストの失敗を防ぎます。
テスト分離とは?
テスト分離とは、各テストが他のテストから完全に分離されている状態のことです。すべてのテストは、他のどのテストからも独立して実行されます。これは、各テストが独自のローカルストレージ、セッションストレージ、Cookieなどを持つことを意味します。Playwrightは、シークレットモードのようなプロファイルに相当するブラウザコンテキストを使用してこれを実現します。これらは高速かつ安価に作成でき、単一のブラウザで実行されている場合でも完全に隔離されます。Playwrightは各テストにコンテキストを作成し、そのコンテキスト内でデフォルトのページを提供します。
テスト分離が重要な理由
- 失敗の持ち越しがない。あるテストが失敗しても、他のテストには影響しません。
- 単一のテストを何度でも実行できるため、エラーや不安定さのデバッグが簡単です。
- 並列実行、シャーディングなどを行う際に順序を気にする必要がありません。
テスト分離の2つの方法
テスト分離には、最初から始めるか、途中でクリーンアップするかの2つの異なる戦略があります。テスト間にクリーンアップを行うことの問題点は、クリーンアップを忘れがちであることと、「訪問済みリンク」のようにクリーンアップが不可能なものがあることです。あるテストの状態が次のテストに漏洩すると、テストが失敗したり、問題が別のテストから来ているためデバッグが難しくなったりする可能性があります。最初から始めるということは、すべてが新しいということなので、テストが失敗した場合、デバッグはそのテスト内だけを見れば済みます。
Playwrightがテスト分離を実現する方法
Playwrightは、ブラウザコンテキストを使用してテスト分離を実現します。各テストには独自のブラウザコンテキストがあります。テストを実行するたびに、新しいブラウザコンテキストが作成されます。Playwrightをテストランナーとして使用する場合、ブラウザコンテキストはデフォルトで作成されます。それ以外の場合は、ブラウザコンテキストを手動で作成できます。
Browser browser = chromium.launch();
BrowserContext context = browser.newContext();
Page page = context.newPage();
ブラウザコンテキストは、モバイルデバイス、パーミッション、ロケール、配色を含むマルチページシナリオをエミュレートするためにも使用できます。詳細については、エミュレーションガイドをご覧ください。
単一テスト内の複数コンテキスト
Playwrightは、単一のシナリオ内で複数のブラウザコンテキストを作成できます。これは、チャットのような複数ユーザー機能のテストに役立ちます。
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType chromium = playwright.chromium();
// Create a Chromium browser instance
Browser browser = chromium.launch();
// Create two isolated browser contexts
BrowserContext userContext = browser.newContext();
BrowserContext adminContext = browser.newContext();
// Create pages and interact with contexts independently
}
}
}