1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CI/CDツール上でテストが落ちる現象に立ち向かった話

Last updated at Posted at 2025-01-21

はじめに

年に何回か直面する現象。
ローカルではテストが通るのにCircleCIでだけテストが通過しない現象にあったので、対応したり調べた内容を備忘録がわりにまとめる。

結論

  • rspecの設定変更やテスト環境のデータ、travel_toの影響が考えられる→テストファイルの実行順序が原因となっているケースが多い
  • CI上では時間短縮のために並列テストを実装しているケースが多く、テストの実行時間によって分割する仕組みを導入している場合、(circleCIの場合はcircleci tests split --split-by=timingsなど)実行時間の変更によってテストの実行順序が変わることも多く、それが原因となることがある

  • 対象のテストファイルをechoで文字列として出力し、テストファイルの実行順序を把握できるようにするとデバッグしやすい

今回のエラー調査のために試してみたことリスト

  1. ローカルでテストを実行してみる
  2. CI上で、落ちたテストファイルのみを実行してみる
  3. 落ちたテスト以外をコメントアウトして実行してみる
  4. ssh接続を行い、テストのコマンドを実行してみる
  5. ssh接続し、circleCIのconfig.ymlのtestジョブで実行してるコマンドを一つずつ実行する

→上記全部試した後にテストの実行順序に着目する(遅すぎ、、)
以下の手順で、さらに原因を細かく特定する

原因を特定するために、さらに細かく試してみる

  1. ローカルで、落ちたテストファイルの前に実行したテストをCI上の順番通りに実行→ローカルでもテストが落ちた!
  2. 落ちたテストファイルの前のテストファイルの数を少なくしていき、何のテストファイルを実行した後にテストが落ちるのか特定する(落ちたテストファイルの直前とは限らないので注意!)
  3. 原因のテストファイルの複数箇所をコメントアウトしながら確認し、どのテストケースを実行するとテストが落ちるの確認する

→ここまで、実行して、原因が特定できた!(ActiveJobのテストが原因だった)

CircleCIのSSH接続について

今回は必要なかったが、覚えておいたほうがいい。意外と簡単。

まとめ

急にテストが落ちるようになったら、テストファイルの実行順序を確認してみようというお話でした

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?