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
190
20分のフルテストを5分にした話
HiroshiToriyabe
January 23, 2018
Tweet
Share
More Decks by HiroshiToriyabe
See All by HiroshiToriyabe
PerlでJVMをつくろう
toricor
1
210
Other Decks in Technology
See All in Technology
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
160
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
430
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
130
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
420
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
600
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
10
1.1k
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Scaling GitHub
holman
458
140k
It's Worth the Effort
3n
183
27k
How to train your dragon (web standard)
notwaldorf
88
5.7k
What's in a price? How to price your products and services
michaelherold
243
12k
Code Review Best Practice
trishagee
64
17k
Making Projects Easy
brettharned
115
5.9k
The Cult of Friendly URLs
andyhume
78
6k
Why Our Code Smells
bkeepers
PRO
334
57k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
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