@Parameters

测试的时候,测试的数据可以放在testng.xml文件中,被测试的方法通过@Parameters注解传递到测试方法中

parameterizedTest.java

import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class parameterizedTest {
@Test
@Parameters("myName")
public void testMethod(String myName) {
System.out.println("myName:" + myName);
}
}

testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<parameter name="myName" value="大盗如风"></parameter>
<classes>
<class name="parameterizedTest"></class>
</classes>
</test>
</suite>

运行testng.xml,结果如下:

myName:大盗如风

@DataProvider

@Test(dataProvider = "")

如果测试的数据较多的情况下,很显然这种方式不适合,那么可以通过@DataProvider生成测试数据,通过@Test(dataProvider = "")使用测试数据

parameterizedTest2.java

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class parameterizedTest2 {
// 定义数据源
@DataProvider(name = "test")
public Object[][] createData() {
return new Object[][]{{"dadaorufeng",29},{"zhangsan",28}};
} // 使用数据源
@Test(dataProvider = "test")
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<classes>
<class name="parameterizedTest2"></class>
</classes>
</test>
</suite>

运行testng.xml,结果如下:

name:dadaorufeng,age:29
name:zhangsan,age:28

刚才这段代码,定义数据源和使用数据源的代码在同一个class中,如果不在同一个class的话,怎么办呢?parameterizedTest2.java中定义数据源,parameterizedTest3.java使用数据源

parameterizedTest2.java

import org.testng.annotations.DataProvider;

public class parameterizedTest2 {
// 定义数据源
@DataProvider(name = "test")
public static Object[][] createData() {
return new Object[][]{{"dadaorufeng",29},{"zhangsan",28}};
}
}

parameterizedTest3.java

import org.testng.annotations.Test;

public class parameterizedTest3 {
// 使用数据源
@Test(dataProvider = "test")
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<classes>
<class name="parameterizedTest3"></class>
</classes>
</test>
</suite>

直接运行testng.xml,结果如下,报错找不到test的@DataProvider :

org.testng.TestNGException:
Method public void parameterizedTest3.verifyData(java.lang.String,int) requires a @DataProvider named : test
at org.testng.internal.Parameters.findDataProvider(Parameters.java:268)
at org.testng.internal.Parameters.handleParameters(Parameters.java:381)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1315)
at org.testng.internal.Invoker.createParameters(Invoker.java:1022)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1122)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.runWorkers(TestRunner.java:1147)
at org.testng.TestRunner.privateRun(TestRunner.java:749)
at org.testng.TestRunner.run(TestRunner.java:600)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:274)
at org.testng.SuiteRunner.run(SuiteRunner.java:223)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1039)
at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
at org.testng.TestNG.run(TestNG.java:900)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:110)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:174)

修改parameterizedTest3.java,添加dataProviderClass = parameterizedTest2.class属性,指定数据源所在的类

import org.testng.annotations.Test;

public class parameterizedTest3 {
// 使用数据源
@Test(dataProvider = "test",dataProviderClass = parameterizedTest2.class)
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

再次运行testng.xml,结果如下,测试通过:

name:dadaorufeng,age:29
name:zhangsan,age:28

testNG之参数化测试的更多相关文章

  1. TestNg 9. 参数化测试-DataProvider参数化

    首先利用@DataProvider(name = "XXX")的属性,将name的值XXX 传递给 @Test(dataProvider = "XXX") 看以 ...

  2. TestNg 8.参数化测试 - xml

    有的时候,case需要参数,那么,传餐怎么传? 我的目录结构:首先建一个包叫做parameter,然后在resource里面新建一个parameter.xml文件 看以下代码: ParameterTe ...

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

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

  4. TestNG @Factory与 @DataProvider 结合使用进行参数化测试

    简介 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试.设计目标的不同,对比junit的只适合用于单 ...

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

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

  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. Apache Flink 为什么能够成为新一代大数据计算引擎?

    众所周知,Apache Flink(以下简称 Flink)最早诞生于欧洲,2014 年由其创始团队捐赠给 Apache 基金会.如同其他诞生之初的项目,它新鲜,它开源,它适应了快速转的世界中更重视的速 ...

  2. vector内存增长方式

    首先必须要了解vector是一种特殊的数组,因此其内存必然是连续的 其次它的连续是建立在不断地对内存的预分配上的,即不断地销毁当前,重新建立内存,效率有点低.所以存在几个函数capacity, siz ...

  3. SQL Server 2008性能故障排查(三)——IO

    接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完全加载到物理内存中,否则SQLServer会不断地把数据库文件从缓 ...

  4. 实验1 C语言环境使用和数据类型 运算符 表达式

    Part1 经过练习我发现自己经长会漏掉分号,有时输入法不同,打出来的括号前后不同,还有转义字符的使用,大小写转化之间的表达.还有打字速度比较慢. Part2 #include<stdio.h& ...

  5. Sumdiv

    题目链接 题意:求a^b的所有约数之和mod9901. 思路:因为一个数A能够表示成多个素数的幂相乘的形式.即A=(a1^n1)*(a2^n2)*(a3^n3)...(am^nm).所以这个题就是要求 ...

  6. rabbitmqadmin命令行管理工具-4

    rabbitmqadmin命令行管理工具原文地址: https://www.cnblogs.com/wuzhiyuan/p/6856985.htmlhttps://www.cnblogs.com/mr ...

  7. [CSP-S模拟测试]:english(可持久化Trie+启发式合并)

    题目传送门(内部题24) 输入格式 第一行有$3$个整数$n,opt$,$opt$的意义将在输出格式中提到.第二行有$n$个整数,第$i$个整数表示$a_i$. 输出格式 若$opt=1$,输出一行一 ...

  8. Gitblit用户没有push权限,但是已经在team里面配置了

    问题: 用户已经移动到team里面,team有对应repository的push权限. does not have push permissions for 解决方案: 发现这个用户以前单独配置了这个 ...

  9. STL双端队列 deque

    头文件:#include<deque> 构造方法: ①.创建一个没有任何元素的双端队列:deque<type> deq ②.用另一个类型相同双端队列初始化该双端队列:deque ...

  10. Microsoft Office Excel

    解除合并,并复制原始值到每一个解除合并后的单元格 对齐方式 -> 合并后居中 -> 取消单元格合并 编辑 -> 查找和选择 -> 定位条件 -> 空值 输入=然后按↑选择 ...