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
200
Other Decks in Technology
See All in Technology
フルカイテン株式会社 採用資料
fullkaiten
0
36k
Shift-from-React-to-Vue
calm1205
3
1.3k
初心者に Vue.js を 教えるには
tsukuha
5
390
[AWS JAPAN 生成AIハッカソン] Dialog の紹介
yoshimi0227
0
150
「視座」の上げ方が成人発達理論にわかりやすくまとまってた / think_ perspective_hidden_dimensions
shuzon
2
4.7k
スプリントゴールにチームの状態も設定する背景とその効果 / Team state in sprint goals why and impact
kakehashi
2
100
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
220
「 SharePoint 難しい」ってよく聞くけど、そんなに言うなら8歳の息子に試してもらった
taichinakamura
1
630
ユーザーの購買行動モデリングとその分析 / dsc-purchase-analysis
cyberagentdevelopers
PRO
2
100
CyberAgent 生成AI Deep Dive with Amazon Web Services / genai-aws
cyberagentdevelopers
PRO
1
480
VPC間の接続方法を整理してみた #自治体クラウド勉強会
non97
1
850
コンテンツを支える 若手ゲームクリエイターの アートディレクションの事例紹介 / cagamefi-game
cyberagentdevelopers
PRO
1
130
Featured
See All Featured
Docker and Python
trallard
40
3.1k
Adopting Sorbet at Scale
ufuk
73
9k
Designing for Performance
lara
604
68k
What's in a price? How to price your products and services
michaelherold
243
12k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Testing 201, or: Great Expectations
jmmastey
38
7k
A designer walks into a library…
pauljervisheath
202
24k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
BBQ
matthewcrist
85
9.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
GraphQLとの向き合い方2022年版
quramy
43
13k
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