🔍
Playwrightのちょっとした小技
はじめに
最近業務で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 () => {
// ...
});
});
});
小技2: test関数は拡張して利用できる
test.extendメソッドを活用してtest関数を拡張して利用することが可能です。
業務では、実際にGraphqlのquery, mutationをinterceptする際に利用しました。
ここでは記事紹介のみとさせていただきます。
小技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の設定を正しく行う必要があるのだと思います。
Discussion