@Dataprovider 和 @Factory 的使用
总结:
0.@Dataprovider 所修饰的方法必须 return Object[][] ; @Facotry 所修饰的方法必须return Object[] ;
1.在测试场景中经常会遇到一个人执行多个case,那么多个人没人都执行一遍这个case的时候就要用到@Factory创建多个对象了,类似于QTP中的迭代;
2.如果测试相关联的类中只有一个带参的构造方法,那么在执行测试的时候可能会抛一个无法初始化某个类的错误,这个时候就要使用@Factory来进行初始化了;
说明:一个人执行多次case和多个人每人都执行多次case是不一样的测试场景,类似于模拟多用户的场景,比如A用户有执行lognin()的权限,而B用户没有这个权限,虽然A和B都是一个用户对象,但他们执行的结果却不一样 ;
以上仅代表个人理解哈,如有不同,+316567803 或者留言进行讨论 ;
1.@Datatprovider 可以放在一个类中为@Test 和 @Factory 提供参数初始化 比如:
package main.test; import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
public class BB {
private int id ;
private String name ;
private int age ;
BB(){}
public BB(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String toString() {
return "BB{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
} /*
*1.为了演示这里提供了2个@DataProvider(dataPraovide1 和 dataPraovide2) ;
* >dataPraovide1 作为Test数据的数据源 ;
* >dataPraovide2 作为@Factory的数据化数据源;
*2.@Factory为BB类提供初始化 ;
*3.@Test 为BB类的print();
*/ @DataProvider(name = "db1")
public Object[][] dataPraovide_1() {
return new Object[][]{
{1, "jack1", 21}, {4, "jack4", 24}, {7, "jack7", 27},
{2, "jack2", 22}, {5, "jack5", 25}, {8, "jack8", 28},
{3, "jack3", 23}, {6, "jack6", 26}, {9, "jack9", 29}
};
}
@DataProvider(name = "db")
public Object[][] dataPraovide_0() {
return new Object[][]{
{1, "jack1", 21}, {4, "jack4", 24}, {7, "jack7", 27},
{2, "jack2", 22}, {5, "jack5", 25}, {8, "jack8", 28},
{3, "jack3", 23}, {6, "jack6", 26}, {9, "jack9", 29}
};
}
//使用db数据源没次创建1个BB的对象,然后使用这个对象执行db1的测试案例(9×9=81次) ;
@Factory(dataProvider = "db")
public Object[] createObj_1(int id, String name, int age) {
BB[] bbArray ={new BB(id, name, age)};
return bbArray;
} @Test( dataProvider = "db1")
public void print(int id ,String name,int age) {
System.out.println(this.toString());
System.out.println("-------"+id+"-----------"+name+"------------"+age);
}
}
执行结果:

2.将@Factory 和 @DataPrivade 放在2个类中进行处理 ;
GG.class 为BB.class提示数据支持;
package main.test; import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory; public class GG {
/*
*1.为了演示这里提供了2个@DataProvider(dataPraovide1 和 dataPraovide2) ;
* >dataPraovide1 作为Test数据的数据源 ;
* >dataPraovide2 作为@Factory的数据化数据源;
*2.@Factory为BB类提供初始化 ;
*3.@Test 为BB类的print();
*/
@DataProvider(name = "db1")
public static Object[][] dataPraovide1() {
return new Object[][]{
{1, "jack1", 21}, {4, "jack4", 24}, {7, "jack7", 27},
{2, "jack2", 22}, {5, "jack5", 25}, {8, "jack8", 28},
{3, "jack3", 23}, {6, "jack6", 26}, {9, "jack9", 29}
};
}
@DataProvider(name = "db")
public Object[][] dataPraovide() {
return new Object[][]{
{1, "jack1", 21}, {4, "jack4", 24}, {7, "jack7", 27},
{2, "jack2", 22}, {5, "jack5", 25}, {8, "jack8", 28},
{3, "jack3", 23}, {6, "jack6", 26}, {9, "jack9", 29}
};
}
//使用db数据源没次创建1个BB的对象,然后使用这个对象执行db1的测试案例(9×9=81次) ;
/* @Factory(dataProvider = "db")
public Object[] createObj_1(int id, String name, int age) {
BB[] bbArray ={new BB(id, name, age)};
return bbArray;
}*/
//使用db数据源没次创建10个BB的对象,然后使用这个对象执行db1的测试案例(10x9×9=810次) ;
@Factory(dataProvider = "db")
public Object[] createObj(int id, String name, int age) {
BB[] bbArray = new BB[10];
for (int i = 0; i < bbArray.length; i++) {
bbArray[i] = new BB(id, name, age);
} return bbArray;
}
}
BB.class
package main.test; import org.testng.annotations.Test;
public class BB {
private int id ;
private String name ;
private int age ;
BB(){}
public BB(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String toString() {
return "BB{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
} //如果不放在一个类中这里要制定dataProviderClass 类;并且dataProvider = "db1" 的方法要为静态的,如果不为静态的会跑错;
@Test( dataProvider = "db1", dataProviderClass = main.test.GG.class )
public void print1(int id ,String name,int age) {
System.out.println(this.toString());
System.out.println("-------"+id+"-----------"+name+"------------"+age);
}
}
tesng.xlm
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<test verbose="2" preserve-order="true"
name="TESTPROVIDER">
<classes>
<!-- 这里必须加载GG类不然执行抛错 -->
<class name="main.test.GG"/>
<class name="main.test.BB">
<methods>
<include name="print1"/>
</methods>
</class>
</classes>
</test>
</suite>
execute.bat 文件
@echo off
set xmlPath=C:\CustomSofter\develop\IDEA\IDEAWorkSpace\C3p0TestPrictice
set lib=C:\CustomSofter\develop\IDEA\IDEAWorkSpace\C3p0TestPrictice\out\artifacts\C3p0TestPrictice_jar
set classpath=%lib%\C3p0TestPrictice.jar;%lib%\jcommander-1.30.jar;%lib%\testng-6.8.8.jar;
java org.testng.TestNG %xmlPath%\testng.xml
pause
下面这个图主要是和execute.bat 文件相对照的

3.执行结果:

4.如果db1方法不为静态的错误:

@Dataprovider 和 @Factory 的使用的更多相关文章
- testng学习-before&after,parameters,并行,factory,beanshell,监听器,依赖注入
一系列的before after的操作测试 [TestNG] Running: C:\Users\user\AppData\Local\Temp\testng-eclipse-1538841744\t ...
- TestNG超详细教程
testNG官网:http://testng.org/doc/download.html howtodoinjava.com里的testNG教程,简单详细:http://howtodoinjava.c ...
- TestNG操作详解
运行测试步骤方法有如下两种: 1. 直接在Eclipse运行testNG的测试用例, 在代码编辑区域鼠标右键, 选择Run as ->testNG Test 2. 在工程的根目录下, 建立tes ...
- TestNG深入理解
以下内容引自: http://blog.csdn.net/wanglha/article/details/42004695 TestNG深入理解 转载 2014年12月18日 13:56:11 参考文 ...
- UI自动化测试(六)TestNG操作详解
在编写TestNG代码的时候,若没有下载TestNG的jar包的话,代码会出错,下载jar包方法见该链接中java+selenium环境搭建的第二步即可:http://www.cnblogs.com/ ...
- testNG入门详解
TestNG 的注释: @DataProvider @ExpectedExceptions @Factory @Test @Parameters <suite name="Parame ...
- TestNG(一)——起步
你可以从 http://testng.org/doc/documentation-main.html 获取信息. 一.简介 TestNG是test next generation的缩写,即下一代测试技 ...
- 实战 TestNG 监听器
TestNG 是一个开源的自动化测试框架,其灵感来自 JUnit 和 NUnit,但它引入了一些新功能,使其功能更强大,更易于使用.TestNG 的设计目标是能够被用于进行各种类型测试:单元测试.功能 ...
- TestNG使用教程详解(接口测试用例编写与断言)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/sinat_34766121/artic ...
随机推荐
- 41-mysql作业
1 2 3 4
- UWP 卡片视图 Card View
上一篇 提到了 UWP 轨道视图Orbit View,这次就说一下卡片视图,毕竟两个差不多. 卡片视图,效果如其名,卡片一样,左右滑动,当然能翻牌最好了. 嗯,我这个可以的额(⊙﹏⊙)... 看下效果 ...
- mybatis学习(一)-------XML 映射配置文件详解
XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配 ...
- Linux日常积累
1. /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量,写在 /etc/profile 里面的是对所有用户永久 ...
- 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...
- golang安装开发环境配置
本机系统:fedora28 step 1 百度搜索 golang 到 go 语言中文网,下载 golang 包,如果是 linux 系统可以直接点击此连接,也可去 go 语言中文网, https:// ...
- POJ2251-Dungeon Master(3维BFS)
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- 安装配置heapster(包含influxdb,grafana)
前提:已搭建好kubernetes集群.安装完dashboard 默认安装的dashboard无法展示集群的度量指标信息,此时就需要安装heapster插件 Heapster 插件使用包含三部分内容: ...
- 记一次nginx -t非常慢的排障经历
在一次修改nginx配置时候,执行 case: #/usr/local/nginx/sbin/nginx -t 出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响ngi ...
- Performance — 前端性能监控利器
Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到.最简单的办法是在window.onload事件中读取各种数据. 大 ...