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
February 14, 2025
0
72
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / component-test-performance-by-library
https://voicy.connpass.com/event/342447/
Startup Angular #9 バレンタインLT会 での発表資料
daichi
February 14, 2025
Tweet
Share
More Decks by daichi
See All by daichi
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
980
自作OSSで仕事を楽にする
kudoas
0
51
自作ツールを作って分かった Go を使うことのメリット
kudoas
0
50
ライブラリのアップデートをスムーズに楽しく進める工夫
kudoas
0
29
Featured
See All Featured
Visualization
eitanlees
146
16k
Designing for humans not robots
tammielis
253
25k
Bash Introduction
62gerente
613
210k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
Rails Girls Zürich Keynote
gr2m
94
13k
A Tale of Four Properties
chriscoyier
159
23k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Agile that works and the tools we love
rasmusluckow
329
21k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
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 この発表で参考にさせていただいた資料一覧