TestNG中@Factory的用法一:简单的数据驱动
为什么要使用@Factory注解呢,先来看下面这个例子
被测试类Person
package ngtest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
* @author Administrator
*
*/
public class Person{
String name;
int age;
@Parameters({"name","age"})
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Test()
public void say() {
System.out.print("我是"+name+" ");
if(age<18){
System.out.println("我未成年");
}else if(age>=18&&age<=45){
System.out.println("我是青年人");
}else if(age>45&&age<=60){
System.out.println("我是中年人");
}else if(age>60){
System.out.println("我是老年人");
}
}
}
该类的say()方法中有四个判断分支,为了测试充分,必须执行四次这个方法,如果不使用@Factory注解,在TestNG配置文件中必须这样配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test1">
<parameter name="name" value="明明" />
<parameter name="age" value="10" />
<classes>
<class name="ngtest.Person" />
</classes>
</test>
<test name="Test2">
<parameter name="name" value="杨子" />
<parameter name="age" value="20" />
<classes>
<class name="ngtest.Person" />
</classes>
</test>
<test name="Test3">
<parameter name="name" value="刘创" />
<parameter name="age" value="50" />
<classes>
<class name="ngtest.Person" />
</classes>
</test>
<test name="Test4">
<parameter name="name" value="朱爷爷" />
<parameter name="age" value="70" />
<classes>
<class name="ngtest.Person" />
</classes>
</test>
</suite>
如果使用@Factory注解,就比较简单,而且方便扩展,示例如下。
不需改动原有类,添加一个新类PersonFactory
package ngtest;
import java.util.ArrayList;
import org.testng.annotations.Factory;
public class PersonFactory {
@Factory
public Object[] factory() {
ArrayList<Person> testList = new ArrayList<>();
Person tp = new Person("明明",10);
testList.add(tp);
Person tp2 = new Person("杨子",20);
testList.add(tp2);
Person tp3 = new Person("刘创",50);
testList.add(tp3);
Person tp4 = new Person("朱爷爷",70);
testList.add(tp4);
return testList.toArray();
}
}
运行时,可以在Eclipse中,在这个factory类上点击右键,run as testng suite执行,也可以配置在testng.xml中,只需要配置factory类即可,原类不用管。
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test1">
<classes>
<class name="ngtest.PersonFactory" />
</classes>
</test>
</suite>
运行结果
[TestNG] Running:
D:\workspace\tester\testng.xml
我是朱爷爷 我是老年人
我是杨子 我是青年人
我是刘创 我是中年人
我是明明 我未成年
===============================================
Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================
使用@Factory的运行原理
- 如果不使用@Factory,运行普通的被@Test标注的方法时,实际上是TestNG框架调用了该类的构造函数构造出一个对象,然后再执行对象的这个方法。
- 使用了@Factory后,可以看到被@Factory标注的方法返回了一个Object数组,数组中每一个元素是一个被测试类的对象。也就是说@Factory构造了多个被测试类对象,然后把每一个对象都传递给了TestNG框架,然后TestNG框架在分别执行这些对象中被@Test标注的方法。
通过上面的描述,我们就知道了@Factory可以帮助我们实现简单的数据驱动测试(根据测试数据,执行对应的程序)。
TestNG中@Factory的用法一:简单的数据驱动的更多相关文章
- testNG中@Factory详解
@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试,其主要应对的场景是:对于某一个测试用例或方法,我们需要输入多个测试数据进行测试,并且这些测试数据可以是有一定关系(可 ...
- TestNG中DataProvider的用法一
目录 为什么要使用DataProvider DataProvider的常规用法 带Method参数的DataProvider 带ITestContext的DataProvider DataProvid ...
- 简单聊聊TestNG中的并发
前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.S ...
- Java自动化测试框架-07 - TestNG之Factory篇 - 欢快畅游梦幻工厂(详细教程)
简介 最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢.今天继续介绍testng的相关知识--工厂. 工厂允许你动态的创建测试.例如,假设 ...
- TestNG中的数据源DataProvider概述
http://blog.csdn.net/taiyangdao/article/details/52141711 在上一篇文章中,我们知道带参数的测试方法,可以在testng.xml配置文件中为其参数 ...
- TestNG之Factory
如果我们的测试方法中,同一个变量需要很多个不同的测试数据,那么这些测试数据由谁提供呢,testng提供了factory的注解,下面我们来一探究竟. 一.单独使用Factory 1.新建一个含有@Fac ...
- TestNg它@Factory详细解释------如何更改参数值测试
原创文章,版权所有所有.转载,归因:http://blog.csdn.net/wanghantong TestNg的@Factory注解从字面意思上来讲就是採用工厂的方法来创建測试数据并配合完毕測试 ...
- TestNG中的DataProvider返回Iterator<Object[]>的妙用
TestNG中使用DataProvider有个好处,就是: 1. 在执行用例的时候dataProvider迭代中的每组数据都是作为一个用例执行 2. 在测试数据有规律的情况下,免去了添加testXML ...
- 【转】TestNG中的并发(多线程)
优势 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力 多线程方式拥有很大的优势: 1). 减少测试运行时间 如果测试集里包含了大量的用 ...
随机推荐
- Kong:Nginx支持的API Gateway管理解决方案
Kong的主要功能 Kong可灵活扩展:只要增添更多的服务器实例,它就能横向扩展,毫无问题,那样你可以支持更多流量,同时确保网络延迟很短. Kong可在任何地方运行:它可以部署在单个或多个数据中心环境 ...
- spark streaming 接收kafka消息之四 -- 运行在 worker 上的 receiver
使用分布式receiver来获取数据使用 WAL 来实现 exactly-once 操作: conf.set("spark.streaming.receiver.writeAheadLog. ...
- linux 十五个原理知识点
DNS系统架构与解析原理http协议通信原理TCP/IP的3次握手和四次断开原理MySQL主从同步原理Nginx配合php的fastcgi工作原理Lvs的4种模式工作原理Memcached工作原理(内 ...
- composer使用gitlab搭建私有库
{ "repositories": [ { "type": "vcs", // 使用gitlab固定 "url": &q ...
- Windows使用Cmder
Windows使用Cmder cmder是一个增强型命令行工具, 不仅可以使用Windows下的所有命令, 更爽的是可以使用linux的命令, shell命令. 下载 官网地址: cmder官网 下载 ...
- ubuntu镜像快速下载
由于官网服务器在国外,下载速度奇慢,所以我们可以利用阿里云镜像下载ubuntu ubuntu 14.04: http://mirrors.aliyun.com/ubuntu-releases/14.0 ...
- oralce中的dual详解 转 http://blog.sina.com.cn/s/blog_a5a24bcb0100zeay.html
dual是属于sys的只有一个X varchar2(1)列查询虚拟列不会产生逻辑IO========================================================== ...
- Wannafly挑战赛1:Treepath(DFS统计)
题目链接 题意 给出一棵树,问长度为偶数的路径数有多少. 思路 记录路径长度为奇数的数目和为偶数的数目,然后 n * (n-1) / 2 求和即可. #include <bits/stdc++. ...
- ZOJ 3962:Seven Segment Display(思维)
https://vjudge.net/problem/ZOJ-3962 题意:有16种灯,每种灯的花费是灯管数目,代表0~F(十六进制),现在从x开始跳n-1秒,每一秒需要的花费是表示当前的数的花费之 ...
- 安卓学习资料推荐《深入理解Android:卷2》下载
下载地址:百度云下载地址 编辑推荐 <深入理解Android:卷2>编辑推荐:经典畅销书<深入理解Android:卷I>姊妹篇,51CTO移动开发频道和开源中国社区一致鼎力推荐 ...