2

ローカルで正常に実行される約 130 のレタス テストがありますが、travis がそれらを実行すると、いくつかのテストの後にハングします。

ここで、テストは 8 番目のシナリオで失敗します: https://travis-ci.org/h3/django-editlive/jobs/3945466

そして、最後のシナリオを削除すると、パスします: https://travis-ci.org/h3/django-editlive/builds/3945648

テストを別々の機能ファイルに分割しようとしましたが、同じ問題です。

特定のシナリオが原因ではなく、実行されたシナリオの数が原因のようです。

トラビスのドキュメントによると:

  • キーボード入力またはその他の種類の人間の操作を待機しています
  • 並行性の問題 (デッドロック、ライブロックなど)
  • コンパイルに非常に時間がかかるネイティブ拡張機能のインストール

私が見ることができる唯一の可能性は同時実行の問題です..しかし、どうすればそれをデバッグできますか?

私のプロジェクトはオープン ソースなので、ソース コード全体は次の場所で入手できます。

4

1 に答える 1

4

この問題について決定的な答えはありませんが、なんとか回避できました。

出力がまったくなかったので、テストをトレースして、ハングする場所を正確に確認できるようにしました。

しかし、strace の出力は travis によって大幅に削除されたので、いくつかの行を grep -v する必要がありました。

私の .travis.yml ファイルでは次のようになります。

script:
  - "strace -q python project/manage.py harvest 2>&1 | grep -v ENOENT"

ENOENT 「そのようなファイルやディレクトリはありません」の略です。strace の出力を理解するために必要ではなかったので、ハングした場所を確認できるように十分な行を切り詰めました。

セレンへのリクエストでハングしていたことが判明しました:

socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(35146), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
send(4, "POST /hub/session/e7cba641-2842-"..., 359, 0) = 359

セレンを実際に置き換えることはできなかったので、大まかな推測をして、firefox を google chrome に置き換えてテストを実行しました。テストは完璧に実行されました。

問題を本当に解決していないのは残念ですが、travis ci でリモートでデバッグすることはせいぜい PITA です。そして、各反復の間に 35 分の待ち時間があるので、もっと重要なことをする必要があります。

于 2013-01-05T03:50:05.357 に答える