testng实现用例失败重跑[修改篇]
来源:互联网 发布:logstash json 编辑:程序博客网 时间:2024/05/22 09:39
testng实现用例失败重跑,对原文做了修改和调整
原文:结合testng实现用例失败重跑 作者:saii
既然是testng实现用例失败重跑,那么我们不谈maven相关,只谈testng的如何实现这个机制,因此对原文做了进一步修改。本来不想写这篇,还是记录下,同时也方便大家参考和学习。
我们在运行自动化测试用例的时候,经常会出现一些异常的情况的情况导致用例失败的问题。所以我们可能会希望对于失败的测试用例再重新运行一次,下来我们来看看结合testng如何使用这个功能
你需要在你的项目中添加如下两个类
Retry.java
import org.testng.IRetryAnalyzer;import org.testng.ITestResult;public class Retry implements IRetryAnalyzer { private int retryCount = 0; private int maxRetryCount = 2; // 失败测试重跑2次 @Override public boolean retry(ITestResult result) { if (retryCount <maxRetryCount) { retryCount++; return true; } return false; }}
RetryListener.java
import java.lang.reflect.Constructor;import java.lang.reflect.Method;import org.testng.IAnnotationTransformer;import org.testng.IRetryAnalyzer;import org.testng.annotations.ITestAnnotation;public class RetryListener implements IAnnotationTransformer { public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { IRetryAnalyzer retry = annotation.getRetryAnalyzer(); if (retry == null) { annotation.setRetryAnalyzer(Retry.class); } }}添加完如上两个类以后,你需要在你的testng.xml文件里面添加对应的监听器
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suite name="Suite"><listeners><listener class-name="com.cheers.test.retrydemp.RetryListener" /></listeners> <test name="Test"> <classes> <class name="com.cheers.test.retrydemp.retryDemoTC1"/> </classes> </test> <!-- Test --></suite> <!-- Suite --><listener class-name="com.cheers.test.retrydemp.TestListener" />
我们测试类如下5个测试test4测试失败情况:
package com.cheers.test.retrydemp;import org.testng.annotations.Test;import junit.framework.Assert;public class retryDemoTC1 {@Testpublic void test1(){Assert.assertEquals(">>>>>>>>>> test1", 1, 1);}@Testpublic void test2(){Assert.assertEquals(">>>>>>>>>> test2", 6, 6);}@Testpublic void test3(){Assert.assertEquals(">>>>>>>>>> test3", 1, 1);}@Testpublic void test4(){System.out.println("******************* 测试重跑是否实现 ***********************");Assert.assertEquals(">>>>>>>>>> test4", 1, 2);}@Testpublic void test5(){Assert.assertEquals(">>>>>>>>>> test5", 1, 1);}}
执行完结果如下:
[TestNG] Running:
C:\Users\huichang\workspace\RetryDemo1\testng.xml
******************* 测试重跑是否实现 ***********************
******************* 测试重跑是否实现 ***********************
******************* 测试重跑是否实现 ***********************
===============================================
Suite
Total tests run: 7, Failures: 3, Skips: 0
===============================================
说明:这个结果显然是有问题的,我们只有5个测试,按照如上的重跑机制,结果里却有7个,失败3个,这是由于这个结果统计不合理,将失败的case也计算在内了。
所以修改如下:
创建一个TestListner.java的类实现ITestListener 的接口,如下所示
package com.cheers.test.retrydemp;import java.util.Iterator;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestNGMethod;import org.testng.ITestResult;public class TestListener implements ITestListener {public void onTestStart(ITestResult result) {// TODO Auto-generated method stub}public void onTestSuccess(ITestResult result) {// TODO Auto-generated method stub}public void onTestFailure(ITestResult result) {// TODO Auto-generated method stub}public void onTestSkipped(ITestResult result) {// TODO Auto-generated method stub}public void onTestFailedButWithinSuccessPercentage(ITestResult result) {// TODO Auto-generated method stub}public void onStart(ITestContext context) {// TODO Auto-generated method stub}public void onFinish(ITestContext context) {// TODO Auto-generated method stubIterator<ITestResult> listOfFailedTests=context.getFailedTests().getAllResults().iterator();while(listOfFailedTests.hasNext()){ITestResult failedTest=listOfFailedTests.next();ITestNGMethod method=failedTest.getMethod();if(context.getFailedTests().getResults(method).size()>1){listOfFailedTests.remove();}else{if(context.getPassedTests().getResults(method).size()>0){listOfFailedTests.remove();}}}}}在testng.xml文件里面添加对应的监听器
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suite name="Suite"><listeners><listener class-name="com.cheers.test.retrydemp.RetryListener" /><listener class-name="com.cheers.test.retrydemp.TestListener" /></listeners> <test name="Test"> <classes> <class name="com.cheers.test.retrydemp.retryDemoTC1"/> </classes> </test> <!-- Test --></suite> <!-- Suite -->再次执行testng.xml结果如下:
[TestNG] Running:
C:\Users\huichang\workspace\RetryDemo1\testng.xml
******************* 测试重跑是否实现 ***********************
******************* 测试重跑是否实现 ***********************
******************* 测试重跑是否实现 ***********************
===============================================
Suite
Total tests run: 5, Failures: 1, Skips: 0
===============================================
在test-output/index.html中也能看到testng的结果报告里边统计是正确的,如下:
- testng实现用例失败重跑[修改篇]
- 结合testng实现用例失败重跑
- 修改testNG源码,实现失败用例自动再执行
- 使用testng listener实现测试用例失败重跑功能
- TestNG实现用例运行失败自动截图和重跑
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- 如何解决testng执行用例失败自动重跑问题
- !!!testng增加失败重跑机制
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- Webdriver+Testng实现测试用例失败自动截图功能
- Webdriver+Testng实现测试用例失败自动截图功能
- TestNG入门教程-14-失败重跑的第二种方法
- 扩展Robot Framework,实现失败用例自动再执行(失败重跑)
- windows node.js环境部署步骤
- 根据id生成指定位数的序号
- Android设置TextView字体
- Android设计模式之浅谈MVP
- springmvc 对应的controller 是否归spring容器管理
- testng实现用例失败重跑[修改篇]
- Unity5.x学习笔记(1)-Unity GUI
- 你会各种测试又咋样,还是末端!
- Spring 定时任务的学习
- 提供App数据清理工作的类 → AppCleanMgr
- Linux 安装PHP NGINX 等所需依赖
- 项目总结
- shell脚本中的命令代换
- 重: Exception sending context initialized event to listener instance of class org.springframework.web