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
97
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / 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
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
660
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
4
5.3k
Hotwireで簡単に非同期処理のユーザー通知を作る / broadcast using Turbo
da1chi
1
170
Blue/Greenデプロイの導入による 運用フローの改善
da1chi
1
1.2k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
170
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
110
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
Typedesign – Prime Four
hannesfritz
42
2.9k
Site-Speed That Sticks
csswizardry
13
1.1k
Agile that works and the tools we love
rasmusluckow
331
21k
Documentation Writing (for coders)
carmenintech
77
5.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
It's Worth the Effort
3n
188
29k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2k
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 この発表で参考にさせていただいた資料一覧