私も以前にこれを尋ねましたが、答えに満足していません。
私が使用するもの:
- Django/pythonのWebサイトで作業しています。
- Python仮想環境でローカルに開発が行われました。
- SCMとしてGITを使用
- GITの開発者ブランチと本番ブランチに別々の仮想サーバーをデプロイする
- 継続的インテグレーションのためのJenkinsCIの使用。Jenkins用にデプロイされた個別の仮想サーバー
働く:
- Webサイトの単体テスト、スモークテスト、統合テストがあります。Jenkinsは、コードがローカルのgitブランチからgitリポジトリのDeveloperおよびProductionブランチにプッシュされるたびに、Jenkinsでビルドがトリガーされるように設定されています。
問題:
- 'python manage.py test'を実行すると、テストはローカルで合格します
- ランダムテスト(主に単体テスト)コードが他のブランチ(開発者と本番)にプッシュされると、Jenkinsで失敗します。
- テストが失敗した後、Jenkinsの[今すぐビルド]ボタンを押して手動でビルドを実行すると、通常、テストに合格し、ビルドは成功します。
- コードに変更が加えられておらず、コードがこれらのブランチにプッシュされている場合、Jenkinsでテストがランダムに失敗することがあります。
いくつかの一般的なエラー:
- AssertionError:302!= 200
- TypeError:'NoneType'オブジェクトは添え字化できません
- IndexError:リストインデックスが範囲外です
- AssertionError:datetime.datetime(2012、12、5、0、0、27、218397)!= datetime.datetime(2012、12、5、0、0、27、239884)
- AssertionError:応答が「x」にリダイレクトされました「y」が必要です
現在までのトラブルシューティング:
- すべてのテストを自分のマシンと仮想サーバーでローカルに実行しました。彼らはうまく動いています。
- 失敗した個々のテストをローカルおよび仮想サーバーで実行しました。彼らはうまく動いています。
- 失敗した条件を再現しようとしましたが、現在、テストに合格しています。
私が見る唯一の問題は、コードが開発者と本番環境にプッシュされるたびに、ランダムなテストの失敗が始まることです。一部のテストは繰り返し失敗します。
誰かがこの問題をトラブルシューティングするために私がもっとできることを教えてもらえますか?私は問題をグーグルで調べてみましたが、無駄でした。xunitpatternsのWebサイトには、不安定なテストの動作に関する優れた洞察があることは知っていますが、そこでほとんどのものを試したので、役に立ちません。