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

分離

はじめに

Playwright で書かれたテストは、ブラウザコンテキストと呼ばれる隔離されたまっさらな環境で実行されます。この分離モデルにより、再現性が向上し、連鎖的なテストの失敗を防ぎます。

テスト分離とは?

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

テスト分離が重要な理由

  • 失敗の持ち越しがない。1つのテストが失敗しても、他のテストに影響を与えません。
  • エラーや不安定さのデバッグが簡単です。なぜなら、単一のテストを何度でも実行できるからです。
  • 並行実行やシャーディングなどを行う際に、順序を考慮する必要がありません。

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