Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
E2Eテストで開発を止めないためのPlaywright高速化
Search
yuzneri
November 08, 2025
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
E2Eテストで開発を止めないためのPlaywright高速化
2025/11/08 PHPカンファレンス福岡2025
yuzneri
November 08, 2025
More Decks by yuzneri
See All by yuzneri
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
テーブルをDELETEした
yuzneri
0
140
昔つくったIoTデバイス
yuzneri
0
92
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
350
色を視る
yuzneri
0
530
ゲームと乱数
yuzneri
0
140
即売会で使える業務用決算端末
yuzneri
0
100
コードの外側に惹かれた
yuzneri
0
93
ぼくの開発環境2026
yuzneri
1
480
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Speed Design
sergeychernyshev
33
2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Un-Boring Meetings
codingconduct
0
380
ラッコキーワード サービス紹介資料
rakko
1
4.3M
The Curious Case for Waylosing
cassininazir
1
450
Code Reviewing Like a Champion
maltzj
528
40k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Bash Introduction
62gerente
615
220k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
撮影OK、𝕏投稿OK ゆずねり@yuzneri E2Eテストで開発を⽌めない ためのPlaywright⾼速化 2025/11/08 PHPカンファレンス福岡2025
ゆずねり@yuzneri •仕事 •バックエンドたまにフロントエン ドエンジニア •趣味 •ドール、ポーカー、謎解き 𝕏:@yuzneri 2025/11/08
⽬次 1. PHPUnitとPlaywrightの違い 2. テスト並列化 3. 認証情報の共有 4. まとめ 2025/11/08
PHPUnit •PHPアプリケーションのテストフレームワーク •PHPで書かれたコードを⾃動テスト •主にユニットテスト、インテグレーションテス トで使う 2025/11/08
Playwright •Webサイトのテストフレームワーク •Webブラウザを⾃動操作してテスト •主にE2Eテストで使う 2025/11/08
Playwrightの特徴 •Chromium、Firefox、WebKitを⾃動操作 •E2Eテストに強い機能が豊富 •様々な環境、⾔語で動く •Windows、MacOS、Linux、Docker •TS/JS、Python、Java、.NET 2025/11/08
テストピラミッド 2025/11/08 E2Eテスト インテグレーション テスト ユニットテスト 速度 速い 遅い コスト
⾼い 低い
E2Eテストは時間がかかる •ユニットテストと同じテストでも、数⼗〜数百 倍時間がかかる •ブラウザの起動 •ページの読み込み •レンダリング 2025/11/08
それぞれの特徴に合わせて使い分ける •ビジネスロジックの 正確性 •エッジケースを網羅 的にテスト •ユーザー体験を検証 •ブラウザ上での JavaScriptを確認 •UIの表⽰や動作を検証 2025/11/08
PHPUnit Playwright
テスト並列実⾏ •テストを複数同時に実⾏する •前提として、テスト間の依存関係がない状態 2025/11/08
テスト並列化の⽅法 1. ワーカー •1台のマシンの中で並列化 2. シャーディング •複数台のマシンで並列化 2025/11/08
ワーカーとシャーディングの違い 2025/11/08 ワーカー シャーディング マシン1 ワーカー1:テスト1,2,3 ワーカー2:テスト4,5,6 ワーカー3:テスト7,8,9 マシン1 シャード1:テスト1,2,3
マシン2 シャード2:テスト4,5,6 マシン3 シャード3:テスト7,8,9
1. ワーカー •1台のマシンの中でテスト並列化 •主にローカル開発で効果的 2025/11/08
設定ファイルのworkersで設定 import { defineConfig } from '@playwright/test'; export default defineConfig({
workers: process.env.CI ? 1 : undefined, }); 2025/11/08
2. シャーディング •複数台のマシンでテスト並列化 •⼤規模なテストやCI環境で効果的 2025/11/08
シャーディングのやり⽅ •testコマンドに引数を付けるだけ •--shard=シャード番号/分割数 npx playwright test --shard=1/3 npx playwright test
--shard=2/3 npx playwright test --shard=3/3 2025/11/08
分割されたレポートの統合 •merge-reportsコマンドで、バラバラになっ たレポートを統合できる npx playwright merge-reports ¥ --reporter html ./all-blob-reports
2025/11/08
GitHub Actionsでシャーディング •matrixを使うとできる •完全な設定例は公式サイトをご覧ください • https://playwright.dev/docs/test-sharding#github- actions-example 2025/11/08
matrix設定例 jobs: playwright-tests: strategy: fail-fast: false matrix: index: [1, 2,
3] # シャード番号 total: [3] # 分割数 steps: ... 2025/11/08
Shardオプション設定例 steps: # チェックアウトやPlaywrightの設定 - run: npx playwright test --shard=${{matrix.index}}/${{matrix.total}}
- uses: actions/upload-artifact@v4 with: name: blob-report-${{ matrix.shardIndex }} path: blob-report 2025/11/08
レポート統合設定例 merge-reports: steps: # チェックアウトやPlaywrightの設定 - uses: actions/download-artifact@v5 with: path:
all-blob-reports pattern: blob-report-* merge-multiple: true - run: npx playwright merge-reports --reporter html ./all-blob-reports 2025/11/08
実⾏のようす 2025/11/08
クッキーやlocalStorageの共有 •storageStateを使うと、クッキーや localStorageをテスト間で共有できる •テストごとにログインしているような場合、1 回にすることができる 2025/11/08
セッションを保存する test('authenticate', async ({ page }) => { await page.fill('#user',
'user'); await page.fill('#pass', 'pass'); await page.click('#login'); await page.context().storageState({ path: 'auth.json' }); }); 2025/11/08
テスト時にセッションをロードする export default defineConfig({ projects: [ {name: 'setup', testMatch: /.*¥.setup¥.ts/},
{ name: 'chromium', use: { ...devices['Desktop Chrome'], storageState: 'auth.json', }, dependencies: ['setup'], }, 2025/11/08 ① setup プ ロ ジ ェ ク ト が 最 初 に 実 ⾏ さ れ る ↑②auth.jsonが保存される ←③テスト時にauth.jsonが ロードされる
その他の⾼速化⽅法 1. ネットワークの最適化 2. アニメーションの無効化 3. セレクター選択の効率化 4. waitForTimeoutの排除 5.
スモークテスト戦略 2025/11/08
まとめ •Playwrightの役割を理解 •Playwrightの便利な仕組みを使う •ワーカーやシャーディングを使って並列化 •認証を使い回す •その他いろいろ 2025/11/08