2017-02-27 63 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