Blog

Playwrightのフィクスチャガイド

こんにちは。ニフティ株式会社のyamanakaです。

所属しているチームでPlaywrightのフィクスチャを導入したため、備忘録も兼ねて調べた内容やフィクスチャ概要から実際の使用例(@nifty紹介特典から紹介コード払い出し)とともに紹介します。

はじめに

ウェブアプリケーションの自動テストは、品質保証プロセスにおいて不可欠な要素となっています。その中で、Microsoftが開発したPlaywrightは、強力で使いやすいクロスブラウザテスト自動化ツールとして注目を集めています。

Playwrightは、Chromium(Chrome、Edge)、Firefox、WebKitベースのブラウザに対応し、JavaScriptやTypeScriptを使用して直感的なAPIを提供します。これにより、高速で信頼性の高いE2Eテストを簡単に作成できます。

しかし、効率的なテスト環境を構築するには、単にテストケースを書くだけでは不十分です。ここで重要な役割を果たすのが「フィクスチャ」です。

フィクスチャとは

フィクスチャとは、テストの実行に必要な前提条件や環境を設定するためのコードのことです。Playwrightにおいて、フィクスチャは以下のような役割を果たします。

1. テスト環境の一貫性を保証
2. コードの重複を削減
3. テストの可読性と保守性を向上
4. テスト実行の効率化

例えば、ブラウザの起動、ページの読み込み、ユーザーログインなど、多くのテストケースで共通して必要な操作をフィクスチャとして定義することで、テストコードをクリーンに保ち、効率的に管理できます。

フィクスチャの定義

Playwrightでは、test.beforeEach()test.beforeAll()などのフックを使用してフィクスチャを定義します。一般的な形式は以下のとおりです。

別ファイルでブラウザ、コンテキスト、ページフィクスチャをそれぞれ作成します、そしてこのフィクスチャを使用するテストファイルでは、以下のようにインポートして使用します。

上記により、基本的なブラウザ、コンテキスト、ページフィクスチャを使いこなすことで、テストの基盤を強固にできます。

カスタムフィクスチャの作成

基本的なフィクスチャに加えて、プロジェクト固有のニーズに合わせてカスタムフィクスチャを作成することができます。

これにより、テストコードの再利用性と管理性をさらに向上させることができます。

ユーザー認証とAPIレスポンスのモック化を例にあげます。

この組み合わせたフィクスチャを使用するテストは以下のようになります。

遷移する処理とAPIリクエストのモックを別々の概念として考えながら組み合わせてユニットテストを構築すると良いのかなと記事にしながら思いました。

フィクスチャのスコープ

Playwrightでは、フィクスチャのスコープを適切に設定することで、テストの効率と信頼性を向上させることができます。

テストファイルスコープ

テストファイル内でのみ使用するフィクスチャは、そのファイル内で定義します。

グローバルスコープ

プロジェクト全体で使用するフィクスチャは、専用のファイル(例:fixtures.ts)で定義し、インポートして使用します。

非同期フィクスチャの扱い方

Playwrightのフィクスチャは非同期操作を効果的にサポートしており、async/awaitを使用して簡単に非同期処理を組み込むことができます。

基本的な非同期フィクスチャ

エラーハンドリング

エラーが発生した場合のハンドリング処理も忘れず作成しましょう。

フィクスチャの依存関係

フィクスチャは他のフィクスチャに依存することができ、これによって複雑なテスト環境を構築できます。

この例では、複数のフィクスチャが互いに依存関係を持っています。

1. apiClient は config に依存
2. loggedInUser は page と apiClient に依存
3. userWithData は loggedInUser と apiClient に依存

実践的な例:払い出したURLに遷移するテスト

ニフティでは光回線サービスをお友達に紹介すると、紹介した方&紹介された方それぞれにニフティポイントをプレゼントするサービスがあります。(@nifty紹介特典

今回は上記サービスから紹介コードを払い出し、紹介ページから申込画面に遷移する内容を例にあげます。

おわりに

Playwrightのフィクスチャを導入することで、コードの再利用や共通化することができるためチームとしても一貫したテストを採用しやすくなります。

APIレスポンスのモック化について調べながらコードを書きましたが、ユニットテストに対して柔軟で安定したテスト環境が構築できると思いました。

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!