カクカクしかじか

技術的なアレコレ

CircleCIでランダムに落ちるテストを調査する方法:seed番号を指定してRspecを動かす

CircleCIでよく分からないところでテストが落ちる

ローカルでは落ちないテストがCIだと落ちる... そんな時、原因はパッと思いつく限りでもいくつかあるだろうと思います。

原因と思われるもの

  1. 実行順序に依存しているテストがある
  2. 時刻系の処理で書き方の不備(特定の条件で意図した時刻にならない)

ローカルで実行しても通る場合の対処法

今回は 1. 実行順序に依存しているパターン と思われるものの対応を模索してみます。

seed番号を指定して実行してみる

$ bundle exec rspec --seed シード番号

seed番号とは...??? 雑に言えばテストの実行番号です!

CircleCIで失敗したテストのseed番号を見てそれをローカルで実施してみると!

(seed番号は Randomized with seed 6478164781 の部分)

image.png

今回の場合だと

$ bundle exec rspec --seed 64781

これでローカルで再現したらテストが落ちるべくして落ちてる可能性が高い! その結果から調査していくと良さそうです!!