在运行测试用例时,有时候希望本次运行结束后自动运行失败的测试用例,以排除结果由于网络或其他连接原因导致的偶发抖动。通过参考查阅资料,有以下几种方法可以达到目的:
***1、maven的surefire 插件,有rerun功能
参考官方文档:http://maven.apache.org/components/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html
***2、junit自定义注解,针对单个case做重试
参考:http://stackoverflow.com/questions/8295100/how-to-re-run-failed-junit-tests-immediately
***3、junit添加testRule规则,针对单个case做重试
***4、junit多线程,扫描测试日志,查找失败的case,记录到Map文件,运行失败的测试用例后将日志写回到原日志中
参考:http://blog.csdn.net/neven7/article/details/43529569
由于项目需要,本篇文章主要介绍第一种方法!
一、maven surefire plugin
1、我这里用的是Version: 2.18.1,该版本支持Re-run Failing Tests,要求Junit 4.X版本
运行命令如下,rerunFailingTestsCount为重试tests次数,设为0或小于0时,参数会被忽略
mvn -Dsurefire.rerunFailingTestsCount=2 test
2、控制台输出结果:
1)如果测试在第一次就成功,则rerun设置将被忽略
3)如果测试在某次rerun成功,则停止rerun,并在最后一次rerun输出PASS, 如:
Run 1: ... Run 2: PASS Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Flakes: 1 ------ Flakes表示有一次rerun
2)如果测试重试count次后仍失败,则结果没有Flake字段,且结果为:
Run 1: ... Run 2: ... Run 3: ...
2、.xml测试报告结果:
1)Rerun后通过