【问题标题】:How do I get my hudson project build to fail on second set of nosetests?如何让我的 hudson 项目构建在第二组鼻子测试中失败?
【发布时间】:2011-01-06 16:08:13
【问题描述】:

我对 Hudson 比较陌生,所以如果这是一个“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
到我的 hudson 配置,基于我在 stackoverflow 上看到的其他一些问题,但它似乎没有什么不同。我尝试强制脚本以人为的退出值终止,以查看它是否甚至关注退出值,但这并没有改变事情。我还尝试将客户端测试移到服务器测试之上,看看是否有某些原因导致 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 吞咽 $? 可能存在问题,但这并不能解释为什么服务器测试成功(失败时),但客户端测试没有(除非 $?被捕获)。

【问题讨论】:

    标签: python bash hudson functional-testing nosetests


    【解决方案1】:

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

    【讨论】:

    • 这很好。我会试一试,然后回复你。
    • @Peter - Peter,这正是问题所在。但我真的很困惑为什么。我把$?进入一个临时变量并测试了临时变量,并且按预期失败了构建。是因为“-ne”正在重置$吗? ?但如果是这样的话,那么我很困惑为什么服务器测试不存在同样的问题。
    • 为了澄清上述评论 - 我删除了所有回声,但脚本仍然以 0 退出,直到我存储了 $?进入临时变量。
    • export 设置自己的退出代码并猜猜是什么。由于导出有效,退出代码为 0。--顺便说一句,为什么在退出脚本后导出一个您无权访问的变量?
    • @Peter - 那里的想法是尝试将它传回给 HUDSON,这样我就可以在 shell 脚本退出后从小脚本界面回显它。我现在已经消除了所有的废话。所以,我只是使用 temp var 测试来自 nosetests 的退出代码。但问题仍然存在:为什么我不需要在服务器测试中做同样的事情?所以,虽然这是一个“修复”,但它提出的问题多于回答的问题:) 我将发布对原始问题文本的更新,向您展示我现在所拥有的......
    猜你喜欢
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2014-08-05
    • 2012-10-09
    • 2013-05-24
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多