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

分離

概要

Playwright で記述されたテストは、ブラウザコンテキストと呼ばれる隔離されたクリーンな環境で実行されます。この分離モデルは、再現性を向上させ、連鎖的なテストの失敗を防ぎます。

テスト分離とは?

テスト分離とは、各テストが他のテストから完全に分離されている状態を指します。すべてのテストは、他のテストから独立して実行されます。これは、各テストが独自のローカルストレージ、セッションストレージ、Cookie などを持つことを意味します。Playwright は、これを実現するために、BrowserContext を使用します。BrowserContext は、インコグニートのようなプロファイルと同等です。BrowserContext は、高速かつ安価に作成でき、単一のブラウザで実行されている場合でも完全に分離されています。Playwright は、各テストごとにコンテキストを作成し、そのコンテキスト内にデフォルトの Page を提供します。

なぜテスト分離が重要なのか?

  • 失敗の持ち越しがない。あるテストが失敗しても、他のテストには影響しません。
  • エラーや不安定さのデバッグが容易。なぜなら、単一のテストを何度でも実行できるからです。
  • 並列実行やシャーディングなどで実行する場合、順序を気にする必要はありません。

テスト分離の 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
}
}
}