2011-01-06 5 views
2

私はハドソンには比較的新しいので、もしこれが「おや」の質問であれば、私を許してください。hudsonプロジェクトのビルドをnosetestの2番目のセットで失敗させるにはどうすればよいですか?

私は、サーバーコンポーネントとクライアントコンポーネントの両方を含むpython(pylonsとnosetestsを採用)で書かれたプロジェクトを持っています。両方のコンポーネントを実行するために、サーバー階層とクライアント階層の両方で機能テストを設定しました。

# Python tests for server 
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI" 
echo "SERVER TEST EXIT STATUS: $?" 
if [ $? -ne 0 ]; then 
    test_status=$test_status+$? 
    export TEST_STATUS=$test_status 
    exit $? 
fi 

(その後、サーバーを起動した後)

# Python tests for client 
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI" 
echo "CLIENT TEST EXIT STATUS: $?" 
if [ $? -ne 0 ]; then 
    test_status=$test_status+$? 
    export TEST_STATUS=$test_status 
    exit $? 
fi 
:私のビルドスクリプト(ハドソンプロジェクトの設定ページから起動シェルスクリプト)で、私はそうのように、シリアルに、二つの異なるnosetestsを実行します

その後、サーバーをシャットダウンします。

最初のテストセット(サーバーテスト)は常に機能します。テストが失敗した場合、ビルドは失敗を報告し、ボールは赤色に変わります。しかし、2番目のセット(クライアントテスト)は動作しません。テストが失敗した場合、STDOUTは失敗を報告し、スクリプトは終了ステータス123を表示しますが、ビルドは失敗しません。

私はhudson構成に

maven.test.failure.ignore=false
を追加しようとしましたが、ここでstackoverflowで見た他のいくつかの質問に基づいていますが、違いはありません。私は、人工出口値で終了するようにスクリプトを強制して、出口値に注意を払っているかどうかを確認しましたが、それは変更されませんでした。私はまた、サーバーテストの上でクライアントテストを動かして、hudsonがnosetestsの1つのセットだけを許可している理由があるかどうかを確認しようとしましたが、それはどちらも変わっていないようです。

誰かが私が間違っていると思われるものがあれば、私は助けていただければ幸いです。さらに情報が必要な場合は、私に知らせてください。

ありがとうございます!

============================

UPDATE:

私が取得することができました次のように動作する2番目のテストセット:

find $WORKSPACE/client/python/src/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI" 
client_test_status=$? 
if [ $client_test_status -ne 0 ]; then 
    echo "Client Test Status = $client_test_status" 
    exit $client_test_status 
fi 

しかし、私はこの変更をSERVERテストに加える必要はありませんでした。クライアントだけ。サーバーのテストはまだ動作し、まだ次のようになります。ここに出回っ

find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI" 
if [ $? -ne 0 ]; then 
    exit $? 
fi 

1つの仮説は、そこPIPEの嚥下$の問題かもしれません?しかし、サーバーのテストが成功した理由は説明していないということです(失敗時)、クライアントテストは($?がキャプチャされていない限り)行いません。

答えて

2

あなたのexitコマンドを見るだけで、なぜサーバーテストが失敗したときにビルドが壊れるのか不思議です。ビルドが失敗したときにサーバーが起動しないという事実と関連している可能性があります。実際にはのエコーの終了ステータスであり、テストスイートの終了ステータスではありません。終了ステータスを最初に取得します(my_exit = $?)。$?の代わりに常に$my_exitを使用してください。

+0

それは素晴らしい点です。私はそのショットを与え、あなたに戻ってきます。 –

+0

@Peter - Peter、これはまさに問題でした。しかし、なぜ私は本当に混乱しています。私は$を置く?一時変数にオフにして、一時変数をテストし、期待通りにビルドに失敗しました。それは "-ne"が$をリセットしているからですか? ?しかし、そうであれば、私はなぜこの同じ問題がサーバテストに存在しないのか困惑しています。 –

+0

上記のコメントを明確にするために、すべてのエコーを削除しましたが、$を保存するまでスクリプトはまだ0で終了していました。一時変数にオフにします。 –

関連する問題