一.修改代码实现用例失败重试

1. 修改代码来实现测试用例的重跑,离不开Listener相关接口,具体涉及接口如下:

接口IRetryAnallyzer

该接口的作用是提供去实现能够让用例运行失败重跑的设置。实现该接口必须要实现retry(ITestResult result)这个方法。返回值类型是布尔型,如果返回是True,那么就执行失败重 跑,返回是false,就不重跑。参数result是当前运行的测试用例的结果状态。

接口IAnnotationTransformer

2.代码重试举例:

1)通过类TestCaseRetry实现接口IRetryAnalyzer,重写retry方法,具体如下:

package com.testngdemo;

import org.testng.*;

import org.testng.annotations.Listeners;

public class TestCaseRetry implements IRetryAnalyzer{

//设置当前执行失败的次数

private static int retryCount = 1;

//设置最大失败执行次数

private static int maxRetryCount = 3;

@Override

public boolean retry(ITestResult iTestResult) {

// TODO Auto-generated method stub

if(retryCount<maxRetryCount){  //当前执行失败次数小于最大执行失败次数时返回true,实际重跑次数为:maxRetryCount-retryCount

retryCount++;

return true;

}

return false;

}

}

2)通过RetryListener类实现IAnnotationTransformer重写transform方法,具体如下:

package com.testngdemo;

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

import org.testng.*;

import org.testng.annotations.ITestAnnotation;

public class RetryListener implements IAnnotationTransformer{

@Override

public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor,Method method) {

//对指定方法设置重跑次数

//     if(method.getName().equals("printMessage")){

//     iTestAnnotation.setInvocationCount(3);

//  }

//对当前运行的用例先通过getRetryAnalyzer()获取重跑的次数的属性,如果属性为空,那么就设置我们自己设置的重跑次数

IRetryAnalyzer myRetry = iTestAnnotation.getRetryAnalyzer();

if(myRetry ==null){

iTestAnnotation.setRetryAnalyzer(TestCaseRetry.class);

}

}

}

3)编写具体测试类TestRetry,具体如下:

package com.testngdemo;

import org.testng.Assert;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

public class TestRetry {

@Test(priority = 1)

public void printMessage() {

Assert.assertEquals(11, 11);

}

@Test(priority = 2)

public void pintErrorMessage() {

Assert.assertEquals(11, 12,"断言失败");

}

}

4)在testng.xml中配置监听,具体如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1">

<listeners>

<listener class-name="com.testngdemo.RetryListener"/>

</listeners>

<test name="test1">

<classes>

<class name="com.testngdemo.TestRetry"/>

</classes>

</test>

</suite>

5)运行结果如下:

二.通过@Test属性设置重跑次数

@Test中另外两个属性invocationCount和invocationTimeOut,具体介绍如下:

invocationCount:调用的次数统计,是这个测试用例被调用执行的次数,该属性可以设置一个用例可以重复跑多次。

invocationTimeOut:调用的超时,设置一个最大的毫秒数来计算执行多次后总共耗时多少,耗时值不能超过设置的最大毫秒数,此属性和invocationCount结合使用才会工作。

package com.testngdemo;

import org.testng.Assert;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

public class TestRetry {

@Test(priority = 1,invocationCount = 3, invocationTimeOut = 3000)

public void printMessage() {

System.out.println("接口测试");

}

@Test(priority = 2,enabled=false)

public void pintErrorMessage() {

Assert.assertEquals(11, 12,"断言失败");

}

}

结果如下:

TestNG教程四TestNG用例失败重试相关推荐

  1. 自动化测试实例分享——《用例失败重试机制》

    1. 背景说明 在开展自动化测试工作时,经常会由于一些外在原因(如网络中断.返回超时)导致自动化测试用例运行失败,而这些失败并不是用例本身验证或被测程序存在Bug而引起的,更可气的是这些失败场景有可能 ...

  2. 重试次数配置_TestNG实践——2.用例失败重试

    @Test 用例失败重跑,retry最终一定是针对测试用例得,一个方法只有被@Test标注了才是测试用例,那么我们看下,@Test注解有没有相关属性呢? retryAnalyzer,就是用于指定失败重 ...

  3. SpringBoot实战教程(3.1)——失败重试机制

    一.Guava-Retry Guava retryer工具与spring-retry类似,都是通过定义重试者角色来包装正常逻辑重试,但是Guava retryer有更优的策略定义,在支持重试次数和重试 ...

  4. HTMLTestRunner 汉化版---来源一个大神的源码(加了失败截图,用例失败重新执行 功能)...

    HTMLTestRunner 汉化版 20170925 测试报告完全汉化,包括错误日志的中文处理 针对selenium UI测试增加失败自动截图功能 增加失败自动重试功能 增加饼图统计 同时兼容pyt ...

  5. 如何解决testng执行用例失败自动重跑问题

    如何解决testng执行用例失败自动重跑问题 参考文章: (1)如何解决testng执行用例失败自动重跑问题 (2)https://www.cnblogs.com/cheese320/p/847864 ...

  6. testng教程_TestNG教程

    testng教程 TestNG is a testing framework for Java application that is inspired from JUnit and NUnit. T ...

  7. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  8. 区块链教程(四):搭建私链、web3.js基础

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  9. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer...

    MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.5 Adding a  raster layer 一.前言 MapServer不仅支持 ...

最新文章

  1. php insert failed,较大的MySQL INSERT语句导致PHP错误
  2. 缓存区溢出检测工具BED
  3. OJ系列之---单词倒排
  4. 2021绵阳南山高考成绩查询,绵阳南山中学举行2021年冲刺高考百日誓师大会
  5. 极简_Gradle多Module项目组建
  6. gridview DataFormatString
  7. python QTreeWidgetItem下面有几个子tree_非常干货:Python 探针实现原理
  8. c语言换行后多空格,关于文件操作,碰到空格就换行
  9. python的命名空间_python的命名空间
  10. 北大学霸不当外交官,回国种地养猪终于熬出年销2000万
  11. Easyx——基于easyx的c语言简单动画入门
  12. 有孚网络与中国科学院虚拟经济与数据科学研究中心签署战略合作协议,推动行业智能化转型加速发展
  13. Android 9 Audio系统笔记:AudioFlinger音频流处理流程
  14. xposed新版52下载_kyqp游戏合集-kyqp游戏下载推荐
  15. Logger.error不打印错误堆栈信息问题
  16. 卡方检验x2检验(chi-square test)
  17. 安卓期末大作业——Android数独游戏
  18. (Xcode)The run destination * is not valid for Running the scheme ‘*‘.
  19. 分享一道蚂蚁金服笔试题
  20. 我们hive库建表默认是orc格式的,建表必须加 as textfile,否则外部文本数据导不进去,这坑趟过两遍了,妈蛋!

热门文章

  1. CF 979E Kuro and Topological Parity
  2. 冒险岛发假信息给服务器,大家不要群假冒险岛
  3. 关于在经济欠发达地区建设简易教育城域网的提案
  4. 成长之路 ------- 一条SQL语句的前世今生
  5. easybuy源码_easybuy数据库设计
  6. 万字博文讲解如何用shell来实现一个俄罗斯方块小游戏
  7. 跨越50年历史河流,带你走进贝尔实验室,一探UNIX起源
  8. ath9k中的EEPROM
  9. w ndoWs8pE模式下载,u启动windows8PE系统维护工具箱下载_u启动windows8PE系统维护工具箱官方下载-太平洋下载中心...
  10. Rosetta中文教程(一)