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
20分のフルテストを5分にした話
Search
HiroshiToriyabe
January 23, 2018
Technology
0
210
20分のフルテストを5分にした話
HiroshiToriyabe
January 23, 2018
Tweet
Share
More Decks by HiroshiToriyabe
See All by HiroshiToriyabe
PerlでJVMをつくろう
toricor
1
220
Other Decks in Technology
See All in Technology
20250707-AI活用の個人差を埋めるチームづくり
shnjtk
6
4.1k
データ基盤からデータベースまで?広がるユースケースのDatabricksについて教えるよ!
akuwano
3
150
AWS CDKの仕組み / how-aws-cdk-works
gotok365
10
730
QuickSight SPICE の効果的な運用戦略~S3 + Athena 構成での実践ノウハウ~/quicksight-spice-s3-athena-best-practices
emiki
0
230
Sansanのデータプロダクトマネジメントのアプローチ
sansantech
PRO
0
220
事例で学ぶ!B2B SaaSにおけるSREの実践例/SRE for B2B SaaS: A Real-World Case Study
bitkey
1
270
助けて! XからWaylandに移行しないと新しいGNOMEが使えなくなっちゃう 2025-07-12
nobutomurata
2
130
Copilot coding agentにベットしたいCTOが開発組織で取り組んだこと / GitHub Copilot coding agent in Team
tnir
0
120
クラウド開発の舞台裏とSRE文化の醸成 / SRE NEXT 2025 Lunch Session
kazeburo
1
400
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
14
8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
54
22k
shake-upを科学する
rsakata
7
900
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
Thoughts on Productivity
jonyablonski
69
4.7k
Balancing Empowerment & Direction
lara
1
440
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Agile that works and the tools we love
rasmusluckow
329
21k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Site-Speed That Sticks
csswizardry
10
690
A designer walks into a library…
pauljervisheath
207
24k
Side Projects
sachag
455
42k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Transcript
20分のフルテストを5分にした 話 鳥谷部 啓
自己紹介 - 鳥谷部 啓 (とりやべ ひろし Github: toricor) - 大学院では生物学を専攻して生き物のお世話の日々
- 新卒1年目エンジニア - 新卒同期から“Jenkinsおじさん”扱いを受ける
CI/CDしてますか?自動化してますか?一日何回デプロイできますか? - 継続的インテグレーション(Continuous Integration) - 頻繁にビルドしてテストを回して問題点を早期に検出する - 継続的デリバリー(Continuous Delivery) -
頻繁にデプロイして価値をユーザーに届ける ビルド テスト インスペクション デプロイ CI(CD)サーバ
CI/CDしてますか?自動化してますか?一日何回デプロイできますか? - 継続的インテグレーション(Continuous Integration) - 頻繁にビルドしてテストを回して問題点を早期に検出する - 継続的デリバリー(Continuous Delivery) -
頻繁にデプロイして価値をユーザーに届ける ビルド テスト インスペクション デプロイ CI(CD)サーバ 今日はここの話 ・サービスの成長とともにテストは増加し、実行時間も長くなるが、どう対処するか
目次 - フルテストを早く終わらせたい!実際に自分で導入した施策たち - マシンパワー増強 - Jenkins Pipelineの機能の利用 - テストケースの分散実行
要約: - 20分のテストを5分で済むようにした - 計算資源を追加することで高速化できるようにした
某プロジェクトではテストに20分強かかっていた 特にサーバサイドのテストファイル数が1000を超えており、時間がかかる。 テスト = フロントエンドのテスト + サーバサイドのテスト フロントテスト サーバサイドテスト テスト
強いマシンでテストが8分で終わるようになった 某プロジェクトのクラウド化によってDB用の強いサーバが空いたので、CIサーバに転用 した CPUのコア数が倍、メモリも 4倍になった フロントテスト サーバサイドテスト テスト やはり金の力か... エンジニアの数も多いのでテスト数は増加し、すぐに実行時間
9分台へ
CIといえばJenkins、高速化に使える機能があるぞ! - Travis CI? Circle CI? 知らない子ですね - Jenkins Pipeline
Pluginを使った - CIフローをgroovyのDSLを用いてコードとして記述 - Pipeline as Code - parallel関数を用いてフロントテストとサーバサイドのテ ストを同時に実行させるようにした - (sample) https://gist.github.com/toricor/00c399fdec4affd76d4c6774dbbe6bef
CIといえばJenkins、高速化に使える機能があるぞ! - Travis CI? Circle CI? 知らない子ですね - Jenkins Pipeline
Pluginを使った - CIフローをgroovyのDSLを用いてコードとして記述 - Pipeline as Code - parallel関数を用いてフロントテストとサーバサイドのテ ストを同時に実行させるようにした フルテストが8分から7分になった!! - (sample) https://gist.github.com/toricor/00c399fdec4affd76d4c6774dbbe6bef
テストを2台のサーバで分散実行させ、フルテストは5分で済むようになった - テストをn台で分担して実行して、あとで結果だけまとめればよいのでは? - サーバサイドのテストを分割した - Java系の人ならParallel Executer Pluginを使えばOKらしい -
PerlではApp::Ikarosがあるぞ http://yapcasia.org/2013/talk/show/767463b0-d8fd-11e2-971a-72936aeab6a4
テストを2台のサーバで分散実行させ、フルテストは5分で済むようになった - テストをn台で分担して実行して、あとで結果だけまとめればよいのでは? - サーバサイドのテストを分割した - Java系の人ならParallel Executer Pluginを使えばOKらしい -
PerlではApp::Ikarosがあるぞ - 使えるサーバが2台しかなかったので2台で - App::Ikarosが前回のテストごとの実行時間にもとづき、いい感じに振り分け - 結果としてテストの実行順がランダムになっていい感じ 最初20分(実は現在23分) → 8分 → 7分 → 5分 で済むようになった!!
Jenkins Stage View Pluginによる、CI各ステップにかかる時間の可視化 cloudbee社HPより CI改善施策がわかりやすく可視化されていくので良い
付録: テスト高速化手法あれこれ - テストしない - テストを並列実行する ex. carton exec prove
-j16 t/ - 不要なDB接続、外部API接続をmockする - テストのときだけインメモリDBを用いる - テストのときだけtmpfsにmysqlのデータをのせる - モジュールをまとめて事前に読み込んでおく ex. forkprove
まとめ - マシンパワーの増強 - Jenkins Pipelineの機能の利用 - テスト分散実行モジュールの利用 これらの施策によりテストを20分->5分へと高速化できた! 気楽にフルテストをぶん回そう!
Jenkinsはいいぞ https://medium.com/@ricardoespsanto/jenkins-is-dead-long-live-concourse-ce13f94e4975