TestNG @Factory与 @DataProvider 结合使用进行参数化测试
简介
TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试,TestNG无疑走的更远。可以用于集成测试,这个特性是我选择TestNG的最重要的原因。
先了解这两个注解的意思
@DataProvider 标记一个方法用于为测试方法提供数据。被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。
从这个DataProvider接收数据@Test方法需要使用一个dataProvider名称等于这个注解的名字。
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]。
代码
文件结构
├── src/main/java/test/demo/TestFactory.java
├── src/main/java/test/demo/LoginPageTest.java
│── src/main/java/test/demo/HomePageTest.java
└── src/test/resources/smokeTest.xml
package test.demo; import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory; /**
* @Description: Demo
* @author wadexu
*
* @updateUser
* @updateDate
*/
public class TestFactory { @DataProvider(name = "datasource")
public Object[][] datasource() { // Creating and filling result array
Object[][] credentials = new Object[2][2]; credentials[0][0] = "User1";
credentials[0][1] = "WadeXu"; credentials[1][0] = "User2";
credentials[1][1] = "JamesBond"; return credentials;
} @Factory(dataProvider = "datasource")
public Object[] createTest(String userID, String userName) { Object[] tests = new Object[2]; tests[0] = new HomePageTest(userID, userName);
tests[1] = new LoginPageTest(userID, userName); return tests;
} }
TestFactory工厂类,在带有@Factory注解的方法中调用被执行的测试类,TestNg会自动调用被执行类中带有@Test注解的方法,被执行的测试类为:HomePageTest , LoginPageTest
使用@DataProvider作为数据注入的方式,向Factory中注入数据,并执行测试。
##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html
package test.demo; import org.testng.annotations.Test; /**
* @Description: Demo Login Page
* @author wadexu
*
* @updateUser
* @updateDate
*/
public class LoginPageTest { private String userID;
private String userName; public LoginPageTest(String userID, String userName) {
this.userID = userID;
this.userName = userName;
} @Test
public void testLogin() {
// for demo purpose only
System.out.println(userID + " - " + userName + " is testing Login page");
} }
package test.demo; import org.testng.annotations.Test; /**
* @Description: Demo Home Page
* @author wadexu
*
* @updateUser
* @updateDate
*/
public class HomePageTest { private String userID;
private String userName; public HomePageTest(String userID, String userName) {
this.userID = userID;
this.userName = userName;
} @Test
public void testHomePage() {
System.out.println(userID + " - " + userName + " is testing Home page");
} }
##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html
TestNG xml配置文件如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--<suite name="DMP_Test_Suite" -->
<suite name="Demo_Test_Suite" parallel="false">
<test name="Demo_Test">
<classes>
<class name="test.demo.TestFactory" />
</classes>
</test>
</suite>
右击xml文件Run as TestNG
Test Result:
Console output:
User1 - WadeXu is testing Home page
User2 - JamesBond is testing Home page
User1 - WadeXu is testing Login page
User2 - JamesBond is testing Login page
注意测试方法将被一共执行的次数,@DataProvider属于循环测试的类型。
TestNG更多功能请参考官方站点
感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。
##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html
TestNG @Factory与 @DataProvider 结合使用进行参数化测试的更多相关文章
- testng入门教程10 TestNG参数化测试
在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...
- TestNG中的DataProvider返回Iterator<Object[]>的妙用
TestNG中使用DataProvider有个好处,就是: 1. 在执行用例的时候dataProvider迭代中的每组数据都是作为一个用例执行 2. 在测试数据有规律的情况下,免去了添加testXML ...
- Junit4参数化测试实现程序与用例数据分离
http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...
- Google单元测试框架gtest之官方sample笔记3--值参数化测试
1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...
- JUnit5参数化测试的几种方式
参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量.用户参数.CSV文件.函数助手,那么JUnit5有哪些参数化测试的方式呢? 依赖 JUnit5需要添加junit ...
- Google C++单元测试框架GoogleTest---值参数化测试
值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...
- JMeter学习-026-JMeter 分布式(远程)参数化测试实例
以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...
- 同时使用Junit4的@Parameterized参数化测试和Spring容器
转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...
- MSTest不支持参数化测试的解决方案
之前的项目中做单元测试一直用的是NUnit,这次做新项目,负责人要求统一用MsTest,理由是MsTest是Visual Studio内置的.用就用吧,我没什么意见.不过用了两天,我就发现一个大问题: ...
随机推荐
- Oracle笔记2-数据库设计
数据库的设计 软件开发的流程:立项->需求分析->概要设计->详细设计->实现->测试->交付->维护 [含数据库设计] 通过需求分析,就可以抽取出关键业务中 ...
- angular2 笔记
动态添加一个component: import { ViewContarinerRef, Component, ComponentFactoryResolver, ViewChild } from ' ...
- android共享内存
在android下不能通过shm_open使用共享内存. 网上有好多关于android下使用Ashmem实现共享内存的,但经过尝试该方法可以mmap出内存,但是和另一个进程没有实现共享. 具体的使用方 ...
- iOS、swift、React Native学习常用的社区、论坛
<!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...
- LINUX测试环境部署mysql(三)
安装配置mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安 ...
- C# 导入Excel到DataSet中
class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...
- strcpy 库函数 拷贝函数
strcpy 是在string.h 里面 #include "stdafx.h"#include "string.h"struct Student{int Se ...
- [原创]cocos2d-x研习录-第三阶 特性之瓦片地图集
由于一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,组合成一个完整的地图,这就是瓦片地图集的基本原理. C ...
- 解决 Django 后台上传图片前端无法展示
- Java中避免表单重复提交
表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...