2017-02-27 7 views
0

私はJenkinsの統合テストの一環としてgitコミットの間で変更されたファイルでのみテストを実行しようとしています。bashの条件付きnosetests

のコードは、フィルタがすべてのファイル結果を削除しない限り動作しません。その後、すべてのテストがノーズで実行されます。私はそのような場合にテストを実行したくないでしょう。

if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT != $GIT_COMMIT ]; then 
    git diff --name-only --diff-filter=d $GIT_PREVIOUS_SUCCESSFUL_COMMIT $GIT_COMMIT | grep .py | xargs nosetests -vv 
fi 

お勧めはありますか?

+1

コードはまったく動作しません。あなたの 'if'ステートメントの条件は、' test "$ GIT_PREVIOUS_SUCCESSFUL_COMMIT"!= "$ GIT_COMMIT" 'または同等のものでなければなりません。 – chepner

+0

あなたは完全に正しいです。私は読みやすいようにスニペットを単純化しようとしましたが、代わりに壊れたコードを書きました!修正中... –

+1

'x '接頭辞は不要です。古くてバグの多いバージョンの[''に対応するための古いハックです。最近のバージョンの ''はそれを必要としません。 – chepner

答えて

0

私はそれを持っていると思う。最初の結果を分割し、nosetestsを呼び出す前にリストが空であるかどうかをチェックする必要がありました。

if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT != $GIT_COMMIT ]; then 
    TESTFILES=$(git diff --name-only --diff-filter=d $GIT_PREVIOUS_SUCCESSFUL_COMMIT $GIT_COMMIT | grep .py) 
    if [ -z "$TESTFILES" ]; then 
     echo "No test files found" 
    else 
     nosetests -vv $TESTFILES 
    fi 
fi 
0

このようにテストしないでください。そのエラーも起こりやすい。

まず、mark your testsをスキップする必要があると思います。 次に、Jenkinsのビルドでは、実行したいものを選択して選択することができます。数百または数千のテストに長時間かかる場合は、pytest-xdistを使用してテストを並列化することを検討する必要があります。すでに知っているように、すべてのテストは独立して実行する必要があります。

私の哲学はすべてをテストしている、または気にしません。

+0

いいえ、私はこの方法だけをテストしません。私は機能的なグレーボックスシステムテストを実行するためにpythonのunittestを少し乱用しています。これは、統合のすべてのテストを実行する前にテストコードが変更された最も不安定なテストを実行するスクリプトの一部です。 –

+0

私は参照してください。グレーボックステストの場合、RobotFrameworkを見てください。それは不思議です。申し訳ありませんが、元の質問についてよく分かりません。 – NinjaGaiden