简介

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. GWAS Simulation

    comvert hmp to ped1, ped2, map fileSB1.ped, SB2.ped, SB.map 1, choose 20 markers for 30 times(WD: /s ...

  2. 解决Cannot delete or update a parent row: a foreign key constraint fails (`current_source_products`.`product_storage`, CONSTRAINT `product_storage_ibfk_3` FOREIGN KEY (`InOperatorID`)

    出现这个异常的原因是因为设置了外键,造成无法更新或删除数据. 1.通过设置FOREIGN_KEY_CHECKS变量来避免这种情况 删除前设置 SET FOREIGN_KEY_CHECKS=0; 删除完 ...

  3. ARP 扫描主机学习笔记

    1.通用套接字地址结构与具体套接字地址结构之间可相互转化 1)通用转具体,某些函数将结果存储在通用套接字地址结构中,这时将通用转换为具体,具体通过访问成员名可以方便的得到结果. 2)具体转通用,为了消 ...

  4. Arduino101/Genuino101的安装入门

    1.首先下载Arduino IDE                      下载地址:http://pan.baidu.com/s/1gewqV2j 选择arduino-1.6.8-windows. ...

  5. Groovy入门教程

    Groovy入门教程 kmyhy@126.com  2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM ...

  6. EF Core CodeFirst实践 ( 使用MS SqlServer)

    这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择  ASP.NET Core Web Application (.NET Core) ...

  7. 关于history.js的使用

    项目地址: https://github.com/browserstate/history.js 做wap端的时候,有些时候一个页面里有很多小页面或者标签,希望刷新浏览器或者按返回键的时候,能够被当成 ...

  8. php部分,一个用递归无限分类的方法

    <?php $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国'); $data[]=array('id'=>2,'paren ...

  9. Git远程仓库(github

    一.创建远程仓库(github) 首先到https://github.com注册一个账号,创建自己的Git,点击repositories,再点new 名字自定义,比如叫fansik,选择public点 ...

  10. Object有哪些公用方法?

    protected Object clone() 创建并返回此对象的一个副本.public boolean equals(Object obj) 指示其他某个对象是否与此对象"相等" ...