如果失败,重新运行片状JUnit测试

时间:2016-06-20 09:06:51

标签: jenkins junit jenkins-plugins

我在Jenkins有一个工作A用于我的自动化测试,如果另一个工作B构建成功,则会触发该工作。工作A进行了几次测试。一些测试是片状的,所以我想再次运行它们几次让他们有机会通过,所以我的构建不会不稳定/失败。

我可以使用任何插件吗?

2 个答案:

答案 0 :(得分:1)

我建议修复您的测试或重写它们,这样只有在某些内容被破坏时它们才会失败。也许你可以嘲笑那些往往会失败的东西。如果您要关注数据库连接,也许可以使用本地的sqlite或嗅觉。

但是还有一个可以重试构建的插件: https://wiki.jenkins-ci.org/display/JENKINS/Naginator+Plugin

只需安装插件,然后检查Post-Build操作"失败后重试构建"在您项目的配置页面上。

如果您想在JUnit上下文中重新运行测试,请查看此处:SO: How to Re-run failed JUnit tests immediately?

答案 1 :(得分:0)

不知道任何插件只能再次运行片状/失败的测试,只有整个版本。它应该是可能的,我只是没有找到任何东西(而且我手上没有足够的时间来写一个)。这是我们在构建基于ant的大型Java项目中所做的:

构建本身非常简单(在junit ant任务中使用xml作为格式化程序):
ant clean compile test

构建还接受单个类名作为参数(使用junit ant任务中的batchtest include部分):
ant -Dtest.class.pattern=SomeClassName test

在jenkins工作结束时,我们使用了"执行shell"建立步骤。想法是搜索所有有错误或失败的测试结果,找出类的名称,然后再次运行该特定测试类。包含失败的文件将被覆盖,并且在构建结束时,构建结束时的测试收集器将不会看到片状测试失败。

#!/bin/bash +x
cd ${WORKSPACE}
for i in $(seq 1 3); do 
    echo "Running failed tests $i time(s)"
    for file in `find -path '*/TEST-*.xml' | xargs grep 'errors\|failures' | grep '\(errors\|failures\)="[1-9]' | cut -d ':' -f 1`; do 
        class=`basename ${file} .xml | rev | cut -d '.' -f 1 | rev`
        ant -Dtest.class.pattern=${class} test
    done
done

在将构建恢复到控制之后,您肯定需要解决片状测试。不要让绿色建筑愚弄你,还有很多工作要做。