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
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / compone...
Search
Daichi KUDO
February 14, 2025
0
93
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / component-test-performance-by-library
https://voicy.connpass.com/event/342447/
Startup Angular #9 バレンタインLT会 での発表資料
Daichi KUDO
February 14, 2025
Tweet
Share
More Decks by Daichi KUDO
See All by Daichi KUDO
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
2
1.1k
Hotwireで簡単に非同期処理のユーザー通知を作る / broadcast using Turbo
da1chi
1
150
Blue/Greenデプロイの導入による 運用フローの改善
da1chi
1
1.1k
自作OSSで仕事を楽にする
da1chi
0
63
Featured
See All Featured
How GitHub (no longer) Works
holman
315
140k
Scaling GitHub
holman
463
140k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Practical Orchestrator
shlominoach
190
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Being A Developer After 40
akosma
90
590k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Optimizing for Happiness
mojombo
379
70k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Building Applications with DynamoDB
mza
96
6.6k
Embracing the Ebb and Flow
colly
88
4.8k
We Have a Design System, Now What?
morganepeng
53
7.8k
Transcript
テストライブラリによって コンポーネントテストの実行時間は どう変わるか? Startup Angular #9 バレンタインLT会 2025-02-14 @Classi. Corp
daichi(だいち)
daichi(だいち) 2022〜2025 Angular, Tools, CI/CD @da1chi24
コンポーネントテストとは
コンポーネントテストとは ① 対象のコンポーネントをレンダリングする
コンポーネントテストとは ② レンダリングしたコンポーネントを操作する
コンポーネントテストとは ③ 振る舞いを検証する
利用できるライブラリ Jasmine jest Web Test Runner vitest 📝 右にいくほど新しい
どれを選べばいいのか?
実行時間で比較してみよう
用意したコンポーネント
1. 各 input に値を入力 2. Submit ボタンをクリック 3. EventEmitterが発火し、入力された値が formData()
の引数として渡される 実施するテストケース
ひたすら実行しコマンド実行〜終了まで計測 ✖ 1000
• Karma (Headless Chrome) • Web Test Runner (Headless Chrome)
• Jest (jsdom) • Vitest + Webdriverio (Headless Chrome) • Vitest + Playwright (Headless Chromium) • Vitest + jsdom 検証するテストライブラリ
計測結果 ※あくまで参考値なので雰囲気だけ掴んでもらえると GitHub Actionsで実行した結果をグラフにしたもの https://github.com/kudoas/benchmark-component-test-for-angular/actions/runs/13299959177/job/37139499475 🥇 🥈 🥉
なぜ実行時間に差が出るのか?
🗂 glob • テスト対象の実行ファイルの集計 🛠 setup (テスト集計後〜テスト実行前) • テスト実行環境の準備、依存関係の解決、テストコードの変換 etc.
🧪 assertion • テストの実行 テストを実行するステップをざっくりいうと...
計測結果をステップで分けると傾向が見えるかも 📝GlobとSetupを分割して計測するの難しかったので、 Assertion以外の時間としてまとめています
Glob + Setup
テストコードを変換するバンドルツールの違い Webpack jest Web Test Runner vitest ts-jest
esbuild は Glob + Setup の時間が短い 📝ただし今回はテストファイルは少ないため、大きな差になっていない可能性あり +α
Assertion
Node.jsでエミュレートしてレンダリングする DOM API を実行し、コンポーネントを操作する コンポーネントがレンダリングされる場所の違い jsdom jest vitest ➕
実際のブラウザでコンポーネントをレンダリングする 実際のブラウザでコンポーネントを操作する コンポーネントがレンダリングされる場所の違い vitest ➕ webdriverio or playwright Web Test
Runner
ブラウザ操作のアーキテクチャの違い https://zenn.dev/togami2864/articles/65af759b4a34f6 📝優良記事なので興味ある方はぜひ! 今回使ったライブラリのものだけ話します
一方向にHTTP通信を行って操作する。間にDriverが必要 毎回通信するため、ブラウザ操作に時間がかかる Webdriver Protocol ➕ webdriverio Browser Automation Tools Protocols
– Webdriver vs CDP
WebSocketでコネクションする。Driverを介さない Webdriver Protocolよりも安定していて速い Chrome Devtools Protocol (CDP) Playwright 01: Selenium
- Playwright architecture comparison playwright Web Test Runner
Assertionはwebdriver > jsdom ≒ CDP 📝 CDPがjsdomと同じくらいの時間になったのが意外🧐 +α CDP CDP
jsdom jsdom webdriver
(余裕あったら) Karmaのアーキテクチャ https://karma-runner.github.io/6.4/intro/how-it-works.html 実行プロセス ① Node.js のサーバーが起動 ② ブラウザを立ち上げて websocketで通信
③ ブラウザ上に配置された iframe でテストスクリプトを実行する 👉 起動までは時間がかかるが、テストの実行自体は早 い
📝 周辺ライブラリやプロトコルの組み合わせによって、同じ テストでも実行時間は異なる ⚠ かなり限られた状況での検証だったので、実運用だと違 う場合は十分ありうる 知見ある方はぜひ話しましょう! 最後に、テストの実行時間と一概に言っても...
daichi(だいち) 2022〜2025 Angular, Tools, CI/CD @da1chi24
• コンポーネントテストの手法とその効果を考える • 次世代のブラウザテスト自動化プロトコルWeb Driver BiDi • Playwright 01: Selenium
- Playwright architecture comparison • Browser Automation Tools Protocols – Webdriver vs CDP この発表で参考にさせていただいた資料一覧