2011-01-06 21 views
2

我对哈德逊比较新,所以请原谅我,如果这是一个“杜”的问题。如何让我的哈德森项目构建在第二组鼻测验上失败?

我有一个用python编写的项目(使用pylons和nosetests),它包括一个服务器组件和一个客户端组件。我在服务器层次结构和客户端层次结构中设置了功能测试,以执行这两个组件。在我的构建脚本(从哈得逊项目配置页面发起一个shell脚本),我运行两个不同的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 

然后关闭服务器。

第一组测试(服务器测试)始终有效。如果测试失败,构建报告失败,球变成红色。然而,第二套(客户端测试)从来没有工作。如果测试失败,STDOUT报告失败,并且脚本显示退出状态123,但构建永远不会失败。

我试着在我的哈德森配置中添加

maven.test.failure.ignore=false
,根据我在这里看到的一些其他问题在stackoverflow上,但它似乎没有任何区别。我尝试强制脚本以人工退出值终止,看看它是否注意退出值,而这并没有改变。我也尝试在服务器测试之上移动客户端测试,以查看哈德森为什么只允许进行一组鼻子测试,但是这似乎也没有改变任何事情。

如果有人有任何想法我可能会做错,我一定会感谢您的帮助。如果您需要更多信息,请告诉我。

谢谢!

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

UPDATE:

我能得到的第二组测试的工作方式如下:

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 

一个假设浮在这里,是有可能与管道吞咽$问题?但这并不能解释为什么服务器测试成功(失败时),但客户端测试不会(除非$被捕获)。

回答

2

只看看你的退出命令,让我想知道为什么你的构建在服务器测试失败时中断。它可能与您的服务器在构建失败时无法启动的事实相关。实际上,您正在检查回显的退出状态,而不是测试套件的退出状态。首先获取退出状态my_exit = $?,然后始终使用$my_exit而不是$?

+0

这是一个伟大的观点。我会给你一个机会,回到你身边。 – 2011-01-06 22:30:28

相关问题