Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 如果失败,请重新运行flaky JUnit测试_Jenkins_Junit_Jenkins Plugins - Fatal编程技术网

Jenkins 如果失败,请重新运行flaky JUnit测试

Jenkins 如果失败,请重新运行flaky JUnit测试,jenkins,junit,jenkins-plugins,Jenkins,Junit,Jenkins Plugins,我在Jenkins有一个用于自动测试的作业a,如果另一个作业B构建成功,就会触发该作业。该作业将运行多个测试。一些测试是脆弱的,所以我想再次运行它们几次,让它们有机会通过,这样我的构建就不会不稳定/失败 有我可以使用的插件吗 我建议您修改或重写测试,这样只有在出现问题时测试才会失败。也许你可以嘲笑那些容易失败的事情。如果您正在断开数据库连接,可能可以使用sqlite或本地的smeting 但也有一个插件可以重试构建: 只需安装插件,然后检查项目配置页面上的构建后操作“失败后重试构建” 如果您想

我在Jenkins有一个用于自动测试的作业a,如果另一个作业B构建成功,就会触发该作业。该作业将运行多个测试。一些测试是脆弱的,所以我想再次运行它们几次,让它们有机会通过,这样我的构建就不会不稳定/失败

有我可以使用的插件吗

我建议您修改或重写测试,这样只有在出现问题时测试才会失败。也许你可以嘲笑那些容易失败的事情。如果您正在断开数据库连接,可能可以使用
sqlite
或本地的smeting

但也有一个插件可以重试构建:

只需安装插件,然后检查项目配置页面上的构建后操作“失败后重试构建”


如果您想在JUnit上下文中重新运行测试,请看这里:

不知道有任何插件可以再次运行不稳定/失败的测试,只有整个构建。这应该是可能的,我只是还没有找到(而且手头没有足够的时间来写)。下面是我们在一个大型java项目上所做的工作,该项目的构建是基于ant的:

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

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

在jenkins作业的最后,我们使用了“ExecuteShell”构建步骤。其思想是搜索所有出现错误或失败的测试结果,找出类的名称,然后再次运行特定的测试类。包含故障的文件将被覆盖,在构建后步骤中,构建结束时的测试收集器将看不到异常的测试故障

#!/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

在重新控制构建之后,您肯定需要解决那些不可靠的测试。别让绿色建筑愚弄你,还有工作要做

谢谢你的回复。我的考试大部分时间都通过了。只有少数人不这样做。我不能真正模拟测试,因为我的服务器在类似的请求中返回并显示不同的数据。你提到的插件最终将再次运行所有测试(不仅仅是失败的测试),因此它不是我问题的解决方案。我添加了一个指向另一个问题的链接,该问题可能会解决你的问题。我认为s.Spieker给你的答案是从长远来看唯一有意义的答案。如果你的一些测试不可靠,那么你最好找出原因;以及如何使它们稳定下来。