分離
はじめに
Playwrightで書かれたテストは、ブラウザコンテキストと呼ばれる隔離されたクリーンな環境で実行されます。この分離モデルは再現性を向上させ、連鎖的なテストの失敗を防ぎます。
テストの分離とは?
テストの分離とは、各テストが他のテストから完全に分離されている状態を指します。すべてのテストは他のテストから独立して実行されます。これは、各テストが独自のローカルストレージ、セッションストレージ、クッキーなどを持つことを意味します。Playwrightはこれを、シークレットモードのようなプロファイルに相当するBrowserContextを使用することで実現しています。これらは高速かつ安価に作成でき、単一のブラウザで実行されている場合でも完全に分離されています。Playwrightは各テスト用にコンテキストを作成し、そのコンテキスト内でデフォルトのPageを提供します。
テストの分離が重要な理由とは?
- 失敗の持ち越しがない。1つのテストが失敗しても、他のテストに影響を与えません。
- エラーや不安定さのデバッグが簡単です。なぜなら、1つのテストを何度でも好きなだけ実行できるからです。
- 並行実行やシャーディングなどを行う際に、実行順序を考慮する必要がありません。
テスト分離の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.
}
}