2

私も以前にこれを尋ねましたが、答えに満足していません。

私が使用するもの:

  • 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サイトには、不安定なテストの動作に関する優れた洞察があることは知っていますが、そこでほとんどのものを試したので、役に立ちません。

4

2 に答える 2

1

これは答えるのが本当に難しい質問です。

django 開発者が陥る一般的な落とし穴がいくつかある可能性がありますが、私は知りません。

それ以外では、これは通常のデバッグです。

  1. 失敗を再現する方法を見つけます。自分のラップトップでテストを失敗させることができれば、素晴らしいことです。できない場合は、失敗したマシンでデバッグする必要があります。

  2. 詳細情報を入手してください。アサートは、失敗したときにカスタム メッセージを出力するように作成できます。関連する変数の値を出力します。コードとテストにデバッグ出力を追加します。物事が本来あるべき姿ではないところを見てください。Google で Python デバッガーの使用方法を確認してください。

心を開いてください。バグは、ハードウェア、ソフトウェア環境、コード、またはテスト コードなど、どこにでも存在する可能性があります。しかし、あなたが神、Linus Torvalds、Brian Kernighan でない限り、バグはキーボードと座席の後ろの間のどこかで発生するというのが安全な最初の仮説です。(そして、上記の 3 人のハッカーは皆、悪いバグも作っています。)

于 2013-01-07T22:41:51.597 に答える