Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20分のフルテストを5分にした話

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 20分のフルテストを5分にした話

Avatar for HiroshiToriyabe

HiroshiToriyabe

January 23, 2018
Tweet

More Decks by HiroshiToriyabe

Other Decks in Technology

Transcript

  1. 自己紹介 - 鳥谷部 啓 (とりやべ ひろし Github: toricor) - 大学院では生物学を専攻して生き物のお世話の日々

    - 新卒1年目エンジニア - 新卒同期から“Jenkinsおじさん”扱いを受ける
  2. CI/CDしてますか?自動化してますか?一日何回デプロイできますか? - 継続的インテグレーション(Continuous Integration) - 頻繁にビルドしてテストを回して問題点を早期に検出する - 継続的デリバリー(Continuous Delivery) -

    頻繁にデプロイして価値をユーザーに届ける ビルド テスト インスペクション デプロイ CI(CD)サーバ 今日はここの話 ・サービスの成長とともにテストは増加し、実行時間も長くなるが、どう対処するか
  3. 目次 - フルテストを早く終わらせたい!実際に自分で導入した施策たち - マシンパワー増強 - Jenkins Pipelineの機能の利用 - テストケースの分散実行

    要約: - 20分のテストを5分で済むようにした - 計算資源を追加することで高速化できるようにした
  4. CIといえばJenkins、高速化に使える機能があるぞ! - Travis CI? Circle CI? 知らない子ですね - Jenkins Pipeline

    Pluginを使った - CIフローをgroovyのDSLを用いてコードとして記述 - Pipeline as Code - parallel関数を用いてフロントテストとサーバサイドのテ ストを同時に実行させるようにした - (sample) https://gist.github.com/toricor/00c399fdec4affd76d4c6774dbbe6bef
  5. 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
  6. テストを2台のサーバで分散実行させ、フルテストは5分で済むようになった - テストをn台で分担して実行して、あとで結果だけまとめればよいのでは? - サーバサイドのテストを分割した - Java系の人ならParallel Executer Pluginを使えばOKらしい -

    PerlではApp::Ikarosがあるぞ - 使えるサーバが2台しかなかったので2台で - App::Ikarosが前回のテストごとの実行時間にもとづき、いい感じに振り分け - 結果としてテストの実行順がランダムになっていい感じ 最初20分(実は現在23分) → 8分 → 7分 → 5分 で済むようになった!!
  7. 付録: テスト高速化手法あれこれ - テストしない - テストを並列実行する ex. carton exec prove

    -j16 t/ - 不要なDB接続、外部API接続をmockする - テストのときだけインメモリDBを用いる - テストのときだけtmpfsにmysqlのデータをのせる - モジュールをまとめて事前に読み込んでおく ex. forkprove