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
200
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
開発組織のための セキュアコーディング研修の始め方
flatt_security
3
2.4k
データの品質が低いと何が困るのか
kzykmyzw
6
1.1k
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
240
管理者しか知らないOutlookの裏側のAIを覗く#AzureTravelers
hirotomotaguchi
2
440
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
14
3.5k
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
220
ハッキングの世界に迫る~攻撃者の思考で考えるセキュリティ~
nomizone
13
5.2k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
140
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
980
利用終了したドメイン名の最強終活〜観測環境を育てて、分析・供養している件〜 / The Ultimate End-of-Life Preparation for Discontinued Domain Names
nttcom
2
200
プロダクトエンジニア構想を立ち上げ、プロダクト志向な組織への成長を続けている話 / grow into a product-oriented organization
hiro_torii
1
220
Featured
See All Featured
It's Worth the Effort
3n
184
28k
Visualization
eitanlees
146
15k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Making Projects Easy
brettharned
116
6k
Agile that works and the tools we love
rasmusluckow
328
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
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