分離
はじめに
Playwright で記述されたテストは、ブラウザコンテキストと呼ばれる分離されたクリーンな環境で実行されます。この分離モデルは再現性を向上させ、テストの連鎖的な失敗を防ぎます。
テスト分離とは?
テスト分離とは、各テストが他のテストから完全に分離されている状態です。すべてのテストは、他のテストとは独立して実行されます。これは、各テストが独自のローカルストレージ、セッションストレージ、Cookie などを持っていることを意味します。Playwright は、インコグニートのようなプロファイルと同等の BrowserContext を使用してこれを実現します。BrowserContext は、高速かつ安価に作成でき、単一のブラウザで実行されている場合でも完全に分離されています。Playwright はテストごとにコンテキストを作成し、そのコンテキスト内にデフォルトの Page を提供します。
なぜテスト分離が重要なのか?
- 失敗の持ち越しがない。あるテストが失敗しても、他のテストには影響しません。
- エラーや不安定さのデバッグが容易。単一のテストを何度でも実行できるためです。
- 並列実行、シャーディングなどの実行順序について考える必要がありません。
テスト分離の 2 つの方法
テスト分離には、スクラッチから開始するか、テスト間にクリーンアップするかの 2 つの異なる戦略があります。テスト間にクリーンアップする場合の問題は、クリーンアップを忘れてしまう可能性があることと、「訪問済みリンク」など、クリーンアップできないものがいくつかあることです。あるテストの状態が次のテストにリークし、テストが失敗したり、問題が別のテストから発生するためデバッグが困難になる可能性があります。スクラッチから開始するということは、すべてが新しいことを意味するため、テストが失敗した場合、デバッグのためにそのテスト内だけを見ればよいのです。
Playwright がどのようにテスト分離を実現するか
Playwright は、ブラウザコンテキストを使用してテスト分離を実現します。各テストには独自のブラウザコンテキストがあります。テストを実行すると、毎回新しいブラウザコンテキストが作成されます。Playwright をテストランナーとして使用する場合、ブラウザコンテキストはデフォルトで作成されます。それ以外の場合は、ブラウザコンテキストを手動で作成できます。
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
ブラウザコンテキストは、モバイルデバイス、パーミッション、ロケール、カラースキームを含むマルチページシナリオをエミュレートするためにも使用できます。詳細については、エミュレーションガイドをご覧ください。
単一のテストにおける複数のコンテキスト
Playwright は、単一のシナリオ内で複数のブラウザコンテキストを作成できます。これは、チャットのようなマルチユーザー機能をテストしたい場合に役立ちます。
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
// Create a Chromium browser instance
await using var browser = await playwright.Chromium.LaunchAsync();
await using var userContext = await browser.NewContextAsync();
await using var adminContext = await browser.NewContextAsync();
// Create pages and interact with contexts independently.
}
}