许多Java开发人员和自动化测试工程师在他们的工作中都使用TestNG作为测试框架。 我也不例外。 这是一个显而易见的选择,因为TestNG提供了非常强大的工具集,使处理各种测试变得更加容易。 为了证明这一点,我将在本文中向您展示如何解决一项不平凡的任务。

问题

如何在单个类中以不同的数据集按特定顺序运行测试? 好吧,好像我用一句话就暴露了这个问题。 但是,如果您要我以更严格的形式提出这句话,我将提供以下列表:

  • 多种测试方法
  • 一门考试
  • 序列运行
  • 每种测试方法都有不同的数据集

这里总结一下这个问题的抽象模式:

TestClass {
firstTest(String testData)
secondTest(String testData)
thirdTest(String testData)
}TestDataSets {
“string 1″
“string 2″
}

运行这些测试应得出以下结果:

firstTest(string 1)
secondTest(string 1)
thirdTest(string 1)firstTest(string 2)
secondTest(string 2)
thirdTest(string 2)

在突出显示并解释了问题之后,我们可以继续解决问题。

TestNG的实现

我将使用最简化的代码构造,但是您可以使用这种方法通过一些特定的逻辑对其进行自定义。

package kill.me.later;import static org.testng.Assert.assertTrue;import org.testng.annotations.Test;public class SomeTest {private int id = 0;private String account = "";public SomeTest(int id, String account) {this.id = id;this.account = account;}@Testpublic void firstTest() {System.out.println("Test #1 with data: "+id+". "+account);assertTrue(true);}@Testpublic void secondTest() {System.out.println("Test #2 with data: "+id+". "+account);assertTrue(true);}@Testpublic void thirdTest() {System.out.println("Test #3 with data: "+id+". "+account);assertTrue(true);}}

检查上面的代码,每个人都可以注意到我使用了常规的TestNG @Test批注应用于void方法。 我也声明了一个构造函数,但是其目的将在后面讨论。 TestNG具有非常有用的注释– @Factory@DataProvider 。 我建议在官方TestNG文档站点上阅读有关它们的信息 。 在阅读这些注释时,我将继续进行实际操作:

package kill.me.later;import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;public class SampleFactory {@Factory(dataProvider="dp")public Object[] createInstances(int id, String account) {return new Object[] {new SomeTest(id, account)};}@DataProvider(name="dp")public static Object[][] dataProvider() {Object[][] dataArray = {{1, "user1"},{2, "user2"}};return dataArray;}}

最后一个代码段提供了SomeTest类中每个测试方法的运行,并在dataProvider中声明了数据集。 但是,如果尝试在TestNG的帮助下运行SampleFactory类,则不会从“问题”部分获得测试方法的执行顺序。 为了实现顺序执行测试方法的顺序,您需要使用TestNG XML启动器:

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

请注意group-by-instances参数。 正是它为测试方法的执行提供了理想的顺序。 因此,现在您可以轻松组织此类DDT运行的测试。

参考: TestNG:在Fruzenshtein的Notes博客上,在我们的JCG合作伙伴 Alexey Zvolinskiy的一个测试类中 , 使用@DataProvider依次运行测试 。

翻译自: https://www.javacodegeeks.com/2014/01/testng-run-tests-sequentially-with-dataprovider-inside-one-test-class.html

TestNG:在一个测试类中使用@DataProvider依次运行测试相关推荐

  1. (1)定义圆Circle类,包含radius半径属性,求面积方法,求周长方法,返返回圆对象的详细信息的方法(2)在测试类中创建长度为5的Circle[]数组,用来装5个圆对象

    import java.util.Random;class Circle{double radius;double area;double perimeter;// 面积public void ger ...

  2. 10.SpringBootTest测试类中引入Service,报空指针异常NullPointerException

    在测试类中引入了SysUserServiceImpl,在用该service调用getInfo()时,报空指针异常.搜索发现需要在测试类上加注解@RunWith(SpringRunner.class) ...

  3. 编写一个用户类(Sysuser),属性包括用户名、真实姓名、年龄、出生日期、密码,类方法中包含单独修改用户年龄、判断用户名和密码、显示用户信息功能,在用户测试类中(TestSysuser),根据用户输

    #本关任务: 编写一个用户类(Sysuser),属性包括用户名.真实姓名.年龄.出生日期.密码,类方法中包含单独修改用户年龄.判断用户名和密码.显示用户信息功能,在用户测试类中(TestSysuser ...

  4. springboot项目导入Redis依赖后在测试类中无法使用(RedisTemplate),报空指针

    问题描述: 在springboot项目导入Redis依赖后,在测试类中无法使用(RedisTemplate),报空指针 前提是都已经添加了注入注解: 添加了注解后还是会报错: 解决方法: 在启动类中加 ...

  5. springboot中service中注入dao失败测试类中注入成功_聊一聊 Java 服务端中的乱象

    查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代." 移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网红利 ...

  6. C#:在一个窗体类中改变另一个窗体控件的属性

    例如:要在Form2窗体类中,改变Form1窗体中某控件的属性(内容.尺寸等). 本人所知道的至少有两种方式,第一种方法类似于设置从属关系,具体方式如下: 1.在Form1中添加一个要改变属性的控件, ...

  7. 定义一个类,并且在测试类中使用

    先定义一个Rectangle类,并且定义成员变量,定义类方法 代码如下: package Yy; public class Rectangle {//定义成员变量String name="佳 ...

  8. java获取当前request_java如何在一个普通的类中获取request对象

    展开全部 你是指你的 web 项目中使用到一个工具性的类,它的形参中没有 HttpRequest 或 HttpSession 参数62616964757a686964616fe4b893e5b19e3 ...

  9. 根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试?

    标准格式包含: 私有属性   无参构造  有参构造  setter 和getter 需求中的方法     需求一:         员工类Employee             属性:姓名name, ...

最新文章

  1. 【数据结构】树状数组 例题剖析
  2. NGUI全面实践教程(大学霸内部资料)
  3. 手写bind_深入理解 JavaScript 之手写 call, apply, bind 方法
  4. 流利说递交招股书:上半年亏1.8亿 王翌持股27.9%
  5. IDEA打包成可执行的JAR包
  6. ubuntu20分区_「图」Canonical希望Ubuntu 20.04 LTS Server Installer更快更舒适
  7. PE文件格式--------------导出表
  8. c++ using 前置声明_C++ 类声明 类前置声明范例
  9. uva 1557 - Calendar Game(博弈)
  10. 阿里当初50亿美元收购UC,现在看来是不是亏大了?
  11. LuoGu P2002 消息扩散
  12. HTML5 Canvas操作图像像素
  13. xlinux中实现mdev
  14. LVS负载均衡的几种模式和算法
  15. FragmentSharedFabTransition
  16. 蒸汽管道图纸符号_管道设备表常用符号.ppt
  17. 百度 bos php,百度BOS云存储上传插件 - 支持客户端直传、服务端中转、分片上传 – 基于ThinkPHP和Bootstrap的极速后台开发框架...
  18. PCB Windows Petya(永恒之蓝)勒索病毒补丁检测代码
  19. 爬取猫眼票房数并数据可视化
  20. nuxt 目录结构及配置文件详解

热门文章

  1. Invalid character found in the request target. The valid characters are defi
  2. Thread打印值的含义
  3. jep290涉及jdk版本_针对JDK 14提议的另外六个JEP
  4. aws jenkins_Jenkins在AWS上(第1部分)
  5. jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper
  6. javaone_JavaOne 2015 –又一年,又向前迈进了一步
  7. java ee 下版本_将旧版本从Java EE 5减少到7
  8. 红帽 jboss_红帽正式宣布发布JBoss BPM Suite 6和JBoss BRMS 6
  9. Spring应用架构
  10. JDK 11的一般可用性