TestNG:在一个测试类中使用@DataProvider依次运行测试
许多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运行的测试。
翻译自: https://www.javacodegeeks.com/2014/01/testng-run-tests-sequentially-with-dataprovider-inside-one-test-class.html
TestNG:在一个测试类中使用@DataProvider依次运行测试相关推荐
- (1)定义圆Circle类,包含radius半径属性,求面积方法,求周长方法,返返回圆对象的详细信息的方法(2)在测试类中创建长度为5的Circle[]数组,用来装5个圆对象
import java.util.Random;class Circle{double radius;double area;double perimeter;// 面积public void ger ...
- 10.SpringBootTest测试类中引入Service,报空指针异常NullPointerException
在测试类中引入了SysUserServiceImpl,在用该service调用getInfo()时,报空指针异常.搜索发现需要在测试类上加注解@RunWith(SpringRunner.class) ...
- 编写一个用户类(Sysuser),属性包括用户名、真实姓名、年龄、出生日期、密码,类方法中包含单独修改用户年龄、判断用户名和密码、显示用户信息功能,在用户测试类中(TestSysuser),根据用户输
#本关任务: 编写一个用户类(Sysuser),属性包括用户名.真实姓名.年龄.出生日期.密码,类方法中包含单独修改用户年龄.判断用户名和密码.显示用户信息功能,在用户测试类中(TestSysuser ...
- springboot项目导入Redis依赖后在测试类中无法使用(RedisTemplate),报空指针
问题描述: 在springboot项目导入Redis依赖后,在测试类中无法使用(RedisTemplate),报空指针 前提是都已经添加了注入注解: 添加了注解后还是会报错: 解决方法: 在启动类中加 ...
- springboot中service中注入dao失败测试类中注入成功_聊一聊 Java 服务端中的乱象
查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代." 移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网红利 ...
- C#:在一个窗体类中改变另一个窗体控件的属性
例如:要在Form2窗体类中,改变Form1窗体中某控件的属性(内容.尺寸等). 本人所知道的至少有两种方式,第一种方法类似于设置从属关系,具体方式如下: 1.在Form1中添加一个要改变属性的控件, ...
- 定义一个类,并且在测试类中使用
先定义一个Rectangle类,并且定义成员变量,定义类方法 代码如下: package Yy; public class Rectangle {//定义成员变量String name="佳 ...
- java获取当前request_java如何在一个普通的类中获取request对象
展开全部 你是指你的 web 项目中使用到一个工具性的类,它的形参中没有 HttpRequest 或 HttpSession 参数62616964757a686964616fe4b893e5b19e3 ...
- 根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试?
标准格式包含: 私有属性 无参构造 有参构造 setter 和getter 需求中的方法 需求一: 员工类Employee 属性:姓名name, ...
最新文章
- 【数据结构】树状数组 例题剖析
- NGUI全面实践教程(大学霸内部资料)
- 手写bind_深入理解 JavaScript 之手写 call, apply, bind 方法
- 流利说递交招股书:上半年亏1.8亿 王翌持股27.9%
- IDEA打包成可执行的JAR包
- ubuntu20分区_「图」Canonical希望Ubuntu 20.04 LTS Server Installer更快更舒适
- PE文件格式--------------导出表
- c++ using 前置声明_C++ 类声明 类前置声明范例
- uva 1557 - Calendar Game(博弈)
- 阿里当初50亿美元收购UC,现在看来是不是亏大了?
- LuoGu P2002 消息扩散
- HTML5 Canvas操作图像像素
- xlinux中实现mdev
- LVS负载均衡的几种模式和算法
- FragmentSharedFabTransition
- 蒸汽管道图纸符号_管道设备表常用符号.ppt
- 百度 bos php,百度BOS云存储上传插件 - 支持客户端直传、服务端中转、分片上传 – 基于ThinkPHP和Bootstrap的极速后台开发框架...
- PCB Windows Petya(永恒之蓝)勒索病毒补丁检测代码
- 爬取猫眼票房数并数据可视化
- nuxt 目录结构及配置文件详解
热门文章
- Invalid character found in the request target. The valid characters are defi
- Thread打印值的含义
- jep290涉及jdk版本_针对JDK 14提议的另外六个JEP
- aws jenkins_Jenkins在AWS上(第1部分)
- jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper
- javaone_JavaOne 2015 –又一年,又向前迈进了一步
- java ee 下版本_将旧版本从Java EE 5减少到7
- 红帽 jboss_红帽正式宣布发布JBoss BPM Suite 6和JBoss BRMS 6
- Spring应用架构
- JDK 11的一般可用性