我对哈德森比较陌生,所以如果这是一个“duh”问题,请原谅我。
我有一个用python(使用pylons和nosetests)编写的项目,其中包括服务器组件和客户端组件。我在服务器层次结构和客户端层次结构中都设置了功能测试,以测试这两个组件。在我的构建脚本(从 hudson 项目配置页面启动的 shell 脚本)中,我连续运行了两个不同的鼻子测试,如下所示:
# 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
然后我关闭了服务器。
第一组测试(服务器测试)始终有效。如果测试失败,则构建报告失败,并且球会变为红色。然而,第二组(客户端测试)永远不会起作用。如果测试失败,STDOUT 会报告失败,并且脚本会显示退出状态 123,但构建永远不会失败。
我试过添加
maven.test.failure.ignore=false根据我在 stackoverflow 上看到的其他一些问题,我的 hudson 配置,但似乎没有什么不同。我尝试强制脚本以人为的退出值终止,以查看它是否甚至关注退出值,但这并没有改变事情。我还尝试将客户端测试移到服务器测试之上,看看是否有某些原因导致 hudson 只允许一组鼻子测试,但这似乎也没有改变。
如果有人知道我可能做错了什么,我肯定会感谢您的帮助。如果您需要更多信息,请告诉我。
谢谢!
==============================
更新:
我能够让第二组测试像这样工作:
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
这里有一个假设,是 PIPE 吞咽 $? 可能存在问题,但这并不能解释为什么服务器测试成功(失败时),但客户端测试没有(除非 $? 被捕获) .