🔍

Playwrightのちょっとした小技

2024/02/05に公開

はじめに

最近業務でPlaywrightを触り始めました。
その中でいくつか課題にぶつかりました。
そのとき見つけた小技を紹介します。

前提

playwrightのversionが1.40以降

対象読者

Playwright初心者だけど実務で導入したい方、あるいはすでに導入されている方。
経験がある方からしたら当然のことかもしれませんが、ご容赦ください。

小技1: テストに名前をつけたいがログに出力したくない時

現場でテストに細かく名前をつけたいという需要がある一方、それらをすべてログに出力したくないという要望がありました。
そんなときに使えるのがtest.stepメソッドです。
以下のようにテスト関数内で利用することができます。

sample.spec.ts
import { test, expect } from '@playwright/test';

test('test ここだけがログに出力される。', async ({ page }) => {
  await test.step('Log in', async () => {
    // ...
  });
  await test.step('Outer step', async () => {
    // ...
    await test.step('Inner step', async () => {
      // ...
    });
  });
});

https://playwright.dev/docs/api/class-test#test-step

小技2: test関数は拡張して利用できる

test.extendメソッドを活用してtest関数を拡張して利用することが可能です。
業務では、実際にGraphqlのquery, mutationをinterceptする際に利用しました。
ここでは記事紹介のみとさせていただきます。

https://www.jayfreestone.com/writing/stubbing-graphql-playwright/
https://playwright.dev/docs/api/class-test#test-extend

小技3: CI実行時のflakyを解消する

CIで実行するとテストテストがflakyになることがあるようです(正しくはローカル実行時でもflakyなのかもしれませんが)。

CI実行時のみworkerを1に設定する

初歩的な話になってしまうかもしれませんが、PlaywrightではCI環境でworderを1にすることが推奨されいているようです(公式ドキュメント)。
実際に公式ドキュメントを参考にしてCI時のみworkerを1に設定することでflakyが解消され、テスト時間が約1分短縮することができました。

playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  // Opt out of parallel tests on CI.
  workers: process.env.CI ? 1 : undefined,
});

CIでテストを並列実行しつつflakyにならないようにするには

こちらは実際に試してことはありません。
しかし、いずれ必要になると考えているのでメモとして残しておきます。
おそらく以下の記事を参考にしてshardingの設定を正しく行う必要があるのだと思います。

https://playwright.dev/docs/next/test-parallel
https://playwright.dev/docs/next/test-sharding

Discussion