简介

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 结合使用进行参数化测试的更多相关文章

  1. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  2. TestNG中的DataProvider返回Iterator<Object[]>的妙用

    TestNG中使用DataProvider有个好处,就是: 1. 在执行用例的时候dataProvider迭代中的每组数据都是作为一个用例执行 2. 在测试数据有规律的情况下,免去了添加testXML ...

  3. Junit4参数化测试实现程序与用例数据分离

    http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...

  4. Google单元测试框架gtest之官方sample笔记3--值参数化测试

    1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...

  5. JUnit5参数化测试的几种方式

    参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量.用户参数.CSV文件.函数助手,那么JUnit5有哪些参数化测试的方式呢? 依赖 JUnit5需要添加junit ...

  6. Google C++单元测试框架GoogleTest---值参数化测试

    值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...

  7. JMeter学习-026-JMeter 分布式(远程)参数化测试实例

    以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...

  8. 同时使用Junit4的@Parameterized参数化测试和Spring容器

    转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...

  9. MSTest不支持参数化测试的解决方案

    之前的项目中做单元测试一直用的是NUnit,这次做新项目,负责人要求统一用MsTest,理由是MsTest是Visual Studio内置的.用就用吧,我没什么意见.不过用了两天,我就发现一个大问题: ...

随机推荐

  1. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  2. tomcat端口号被占用或者修改端口号的解决方法

    一)修改端口号: 在tomcat文件中找到conf里面的server.xml 在tomcat解压后的文件中按照下图操作

  3. 关于Java中的基本数据类型转换

    Java中的基本类型有四种,其中整型分为byte.short.int.long,浮点型分为float.double,字符型char,布尔型boolean.8种类型的级别由低到高byte->sho ...

  4. DNS学习笔记之DNS理论知识

    DNS: Domain Name System (将域名和ip地址相互转化) 域名是一个范围,例如baidu.com,.com.而www.baidu.com是个主机名,即FQDN: Full Qual ...

  5. oracle rman恢复数据库 方式恢复到异地数据库

    目的:从某个环境中,获取相关文件,放到异地机器使用rman 恢复.   情况说明:XX系统使用的是oracle数据库,现已从服务器拉下来相关文件,依靠这些文件来早本地的测试机上恢复数据库,方便进行数据 ...

  6. C++联合体(union)

    C++的union本质上也是个类,跟struct性质几乎一致但是有一个最大的区别,数据共享内存 说到共享内存就要说下union的内存分配 union的大小是按照union里面的成员内存的最大值而分配的 ...

  7. uva 10820

    /* 交表 _________________________________________________________________________________ #include < ...

  8. 用C#,SQL Server编写的音乐播放软件

    主界面代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  9. CentOS 7 安装 WordPress,PHP,Nginx,MySQL(MariaDB),FTP

    主要资料参考:https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-st ...

  10. 字符串hash算法

    http://www.cnblogs.com/zyf0163/p/4806951.html hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配. 首先我们会想一下二进制数. ...