2017-02-27 18 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的單元測試來運行功能灰盒系統測試。這是腳本的一部分,用於運行最不穩定的測試,其中測試代碼在集成中運行所有測試之前已更改。 –

+0

我明白了。對於灰盒測試,請查看RobotFramework。它確實有奇效。對不起,對原始問題不太瞭解。 – NinjaGaiden