Testng Retry失败用例重新运行的方法(一)

Testng是Java自动化测试的一个框架,它提供了一个对失败用例重新执行的监听器,即接口 - IRetryAnalyzer。

先准备一个测试类:

1import org.testng.annotations.Test; 2 3import static org.testng.Assert.assertTrue; 4 5public class ITTest { 6 @Test 7 public void f() { 8 assertTrue(false); 9 10 } 11}

 测试类包含一个@Test方法,执行会失败。

另外,我们添加2个Java类。第一个,TestngRetry.java。该类实现了接口 IRetryAnalyzer,定义了retry的最大次数,当未达到retry最大数时,返回true;如果达到retry最大数,则返回false,停止retry。

1import org.testng.IRetryAnalyzer; 2import org.testng.ITestResult; 3 4public class TestngRetry implements IRetryAnalyzer { 5 6 private int count = 1; 7 private int maxRetryCount = 3; 8 9 public boolean retry(ITestResult result) { 10 // TODO Auto-generated method stub 11 if(count <= maxRetryCount){ 12 13 result.setAttribute("RETRY", new Integer(count)); 14 count++; 15 return true; 16 } 17 return false; 18 } 19}

 接下来,添加监听器RetryListener.java,实现接口IAnnotationTransformer。

1package com.sso; 2 3import java.lang.reflect.Constructor; 4import java.lang.reflect.Method; 5import org.testng.IRetryAnalyzer; 6import org.testng.annotations.ITestAnnotation; 7import org.testng.internal.annotations.IAnnotationTransformer; 8 9public class RetryListener implements IAnnotationTransformer { 10 @SuppressWarnings("rawtypes") 11 public void transform(ITestAnnotation annotation, Class testClass, 12 Constructor testConstructor, Method testMethod) { 13 IRetryAnalyzer retry = annotation.getRetryAnalyzer(); 14 if (retry == null) { 15 annotation.setRetryAnalyzer(TestngRetry.class); 16 } 17 } 18 19 20}

 然后,在testng.xml中添加listener,如:

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 3<suite name="Suite"> 4 <test thread-count="3" name="Test"> 5 <classes> 6 <class name="com.sso.ITTest" /> 7 </classes> 8 </test> <!-- Test --> 9 10 <listeners> 11 <listener class-name="com.sso.RetryListener" /> 12 </listeners> 13</suite> <!-- Suite -->

运行testng,得到结果:

1[RemoteTestNG] detected TestNG version 6.14.3 2 3=============================================== 4Suite 5Total tests run: 4, Failures: 1, Skips: 3 6===============================================

 用例一共重复执行3次,加上第一次的执行,共执行4次。重复执行后,失败的用例被标记成了Skip。

另外,除了在testng.xml添加listener,还有2种方式添加listener,其一是在通过@Listeners注释,如:

1import org.testng.annotations.Listeners; 2import org.testng.annotations.Test; 3 4import static org.testng.Assert.assertTrue; 5 6@Listeners(com.sso.RetryListener.class) 7public class ITTest { 8 @Test 9 public void f() { 10 assertTrue(false); 11 12 } 13}

 还有一种是通过@Test注释,如:

1import org.testng.annotations.Test; 2import static org.testng.Assert.assertTrue; 3 4public class ITTest { 5 @Test(retryAnalyzer = com.sso.RetryListener.class) 6 public void f() { 7 assertTrue(false); 8 9 } 10}

 三种添加listener的方式,使用其中一种即可,不要同时使用。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang