曾经做过一需求,需要单个集成测试用例循环执行N次,或许你会说for循环就可以了,这当然是可以的。那有没有逼格更高点的方法,当然也是有的。下面我们就说下使用TestNG注解功能实现用例的循环执行。

1、直接使用注解

//invocationCount 即表示该用例循环执行多少次
@Test(invocationCount = 3)
public void test() {
System.err.println("1222");
}

该方法有一个弊端,如果用例比较多,修改循环次数就会比较麻烦,需要一个一个去修改。

2、使用监听功能

2.1、实现监听接口

/**
* 实现IAnnotationTransformer 接口
* @author houlandong
*
*/
public class RetryListener implements IAnnotationTransformer{ @Override
public void transform(ITestAnnotation annotation, Class testClass,
Constructor testConstructor, Method testMethod) { //统一设置循环次数
annotation.setInvocationCount(5);
}
}

2.2、配置监听

<suite name="TradeTest" preserve-order="true" parallel="false"
thread-count="5" annotations="javadoc" skipfailedinvocationcounts="true"
configfailurepolicy="continue">
<test name="TradeTest" verbose="2" preserve-order="true" parallel="false"
thread-count="5" annotations="javadoc" group-by-instances="false"
skipfailedinvocationcounts="true" configfailurepolicy="continue">
<classes>
<!--需要执行的用例-->
<class name="com.enniu.cloud.services.tmsdefender.util.Leohou" />
</classes>
</test>
<listeners>
<!--实现的监听接口-->
<listener class-name="com.enniu.cloud.services.tmsdefender.util.RetryListener" />
</listeners>
</suite>

注意:

1、该方法需要配合mvn test和testng.xml(TestNG的灵魂,可以自行百度进行更多的了解) 一起使用,在xml文件中配置我们实现的监听,这样就统一配置了该suite包含的所有用例的循环次数。

2、监听设置的优先级> 直接使用注解的方式,所以该方法不方便设置某一个用例的循环次数。

我是通过配置文件来实现的

       // 统一设置循环次数
annotation.setInvocationCount(5); // 设置 需要特殊处理方法的循环次数
String excepLoopCount = property.getProperty("excepLoopCount");
String[] excepCount = excepLoopCount.split(";");
for (int i = 0; i < excepCount.length; i++) {
String[] temp = excepCount[i].split(",");
if (testMethod.getName().equals(temp[0])) { LogUtil.info("该方法循环" + temp[1] + "次");
annotation.setInvocationCount(Integer.valueOf(temp[1]));
}
}

即通过配置文件把需要特殊处理的类和循环次数 再次进行单独设置。

具体要怎么使用,需要根据业务具体分析了

TestNG设置用例循环执行的更多相关文章

  1. OpenCL多次循环执行内核的一个简单样例

    最近有不少朋友在多次循环执行OpenCL内核程序的时候碰到一些问题.由于对OpenCL初学者而言可能比较普遍,因此我这里给出一个清晰简单的demo来掩饰如何简单又高效地执行循环执行OpenCL内核. ...

  2. 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)

    循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...

  3. 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务

    目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...

  4. TestNg线程池配置、执行次数配置、超时配置

    使用注解的方式对TestNg线程池配置.执行次数配置.超时配置 注:使用注解来控制测试方法运行的次数和超时时间,timeOut在单线程或者多线程模式下都可用,threadPoolSize设置了线程池的 ...

  5. Linux学习-循环执行的例行性工作排程

    循环执行的例行性工作排程则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的例行性工作,因此这个系统服务是默认启动的. 另外, 由于使用者自己也可以进行例行性工 ...

  6. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  7. js获取时间,循环执行任务,延迟执行任务

    一.获取时间 核心方法创建一个时间对象:new Date() 时间对象相关操作 时间对象.函数名 函数名 功能 getYear() 获取四位数的年份 getMonth() 获取2位数的月数, 这个是从 ...

  8. jmeter-多用户循环执行(存储token)

    1.从cvs文件中读取数据 登录接口读取文件: 2.读取token,保存token 在登录接口下添加 设置: 把token保存为全局变量: 设置: 输入${__setProperty(newtoken ...

  9. JS定时器使用,定时定点,固定时刻,循环执行

    JS定时器使用,定时定点,固定时刻,循环执行 本文概述:本文主要介绍通过JS实现定时定点执行,在某一个固定时刻执行某个函数的方法.比如说在下一个整点执行,在每一个整点执行,每隔10分钟定时执行的方法. ...

随机推荐

  1. 使用回溯法解批处理作业调度问题<算法分析>

    一.实验内容及要求 1.要求用回溯法原理求解问题: 2.要求手工输入t1[10]及t2[10],t1[i]是任务i在机器1上的执行时间,t2[i]是任务i在机器2上的执行时间: 3.求出最优批处理作业 ...

  2. 1016-Prime Ring Problem,素数环,深搜!

    Prime Ring Problem                                                                                   ...

  3. IDA-IDC脚本编写语法

    1.IDA脚本编写基础 IDC是IDA内置的脚本语言,其语法与C非常相似,它是一种解释性语言. 执行方法 在IDA中按SHIFT+F2键会弹出一个对话框,把语句直接写在对话框中,点击run就可被运行. ...

  4. 【POJ3680】Intervals(费用流)

    题意:有n条线段,每条有起点,终点和一个权值 要求选取一些线段,使它们的权值和最大,并且使每一个点被覆盖不超过k次 1 ≤ K ≤ N ≤ 200 1 ≤ ai < bi ≤ 100,000, ...

  5. Swoole 入门学习(二)

    Swoole 入门学习 swoole 之 定时器 循环触发:swoole_timer_tick    (和js的setintval类似) 参数1:int $after_time_ms 指定时间[毫秒] ...

  6. 2017-10-03-morning

    #include <algorithm> #include <cstring> #include <cstdio> inline void read(int &am ...

  7. Divide Two Integers(模拟计算机除法)

    Divide two integers without using multiplication, division and mod operator. 由于不能用乘号,除号,和取余.那么一个数除另外 ...

  8. 调整JVM内存大小

    首次运行公司项目,出现了内存溢出,具体出现java.lang.OutOfMemoryError: PermGen space和java.lang.OutOfMemoryError:GC overhea ...

  9. 【.Net 学习系列】-- 反射的简单用法

    新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...

  10. PyMySQL - Python3 MySQL数据库连接 - 基本操作

    一.Python连接MySQL数据库   1.导入模块 #导入模块 import pymysql   2.打开数据库连接 #打开数据库连接 #注意:这里已经假定存在数据库testdb,db指定了连接的 ...