我在Jenkins有一个工作A用于我的自动化测试,如果另一个工作B构建成功,则会触发该工作。工作A进行了几次测试。一些测试是片状的,所以我想再次运行它们几次让他们有机会通过,所以我的构建不会不稳定/失败。
我可以使用任何插件吗?
答案 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
在将构建恢复到控制之后,您肯定需要解决片状测试。不要让绿色建筑愚弄你,还有很多工作要做。