在TestNG的另一个有趣的功能是参数测试。在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试。参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值。
TestNG让你直接传递参数测试方法两种不同的方式:
使用testng.xml
数据提供程序
传递参数使用testng.xml
有了这种技术,在testng.xml文件中定义的简单参数,然后在源文件中引用这些参数。让我们看看下面的例子中如何使用这种技术来传递参数。
创建测试案例类
创建一个Java测试类 ParameterizedTest1.java.
测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。
添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。
创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest1 {
@Test
@Parameters("myName")
public void parameterTest(String myName) {
System.out.println("Parameterized value is : " + myName);
}
}
创建 TESTNG.XML
创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<parameter name="myName" value="manisha"/>
<classes>
<class name="ParameterizedTest1" />
</classes>
</test>
</suite>
我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值
编译使用javac的测试用例类。
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
验证输出。

Parameterized value is : manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG 对testng.xml 的参数的类型指定的值会自动尝试转换。下面是支持的类型:
String
int/Integer
boolean/Boolean
byte/Byte
char/Character
double/Double
float/Float
long/Long
short/Short
传递参数与数据提供者
当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。
让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。
实例 1
在这里 @DataProvider 通过整数和布尔参数。
创建Java类
创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE
public class PrimeNumberChecker {
public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider1.java.
定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。
测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。
添加注释 @Test(dataProvider = "test1") 到此方法。dataProvider的属性被映射到"test1".
创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider1 {
private PrimeNumberChecker primeNumberChecker;

@BeforeMethod
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}

@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] { { 2, true }, { 6, false }, { 19, true },
{ 22, false }, { 23, true } };
}

// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber,
Boolean expectedResult) {
System.out.println(inputNumber + " " + expectedResult);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
创建 TESTNG.XML
创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<classes>
<class name="ParamTestWithDataProvider1" />
</classes>
</test>
</suite>
编译使用javac的测试用例类。

C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
运行testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
验证输出。

2 true
6 false
19 true
22 false
23 true

===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
实例 2
在这里,@DataProvider 传递对象作为参数。
创建Java类
创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
public class Bean {
private String val;
private int i;
public Bean(String val, int i){
this.val=val;
this.i=i;
}
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider2.java.
定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。
添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。
添加注释 @Test(dataProvider = "test1") 到此方法. dataProvider 属性被映射到 "test1".
创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider2 {
@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] { { new Bean("hi I am the bean", 111) } };
}

@Test(dataProvider = "test1")
public void testMethod(Bean myBean) {
System.out.println(myBean.getVal() + " " + myBean.getI());
}
}
创建 TESTNG.XML
创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例.
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<classes>
<class name="ParamTestWithDataProvider2" />
</classes>
</test>
</suite>
编译使用javac的测试用例类。

C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
运行 testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
验证输出。

hi I am the bean 111

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

转载于:https://www.cnblogs.com/sanger/p/5092450.html

TestNG参数化测试相关推荐

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

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

  2. java参数化测试除法_TestNG - 参数化测试( Parameterized Test)

    TestNG - 参数化测试( Parameterized Test) TestNG中另一个有趣的功能是parametric testing . 在大多数情况下,您会遇到业务逻辑需要大量不同测试的情况 ...

  3. 浅谈Junit4和TestNG中的参数化测试

    最近在看Junit4的相关知识,由于本身做的是自动化方面的测试,所以工作上着重于应用TestNG.恰好遇到了一个将case进行参数化的需求,故在此记录Junit4和TestNG在参数化方面的区别. 一 ...

  4. testng执行参数_TestNG参数化测试

    TestNG中的另一个有趣的功能是参数化测试. 在大多数情况下,您会遇到业务逻辑需要大量测试的场景. 参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试. TestNG可以通过两种不同的方式 ...

  5. 参数化测试 junit_JUnit参数化测试

    参数化测试 junit JUnit Parameterized Tests allow us to run a test method multiple times with different ar ...

  6. junit 单元测试 - 参数化测试

    junit4.x版本需要引入如下jar包: hamcrest-core-1.3.jar junit-4.12-beta-3.jar 新建一个计算器类,如下: package com.pt;public ...

  7. 软件测试——JUnit中的参数化测试

    2019独角兽企业重金招聘Python工程师标准>>> 参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候. 使用参数化测试的要点: ① 为该测试方法专门生成一个新的类: ...

  8. java自动化测试报告_Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  9. boost::test模块测试参数化测试

    boost::test模块测试参数化测试 实现功能 C++实现代码 实现功能 boost::test模块测试参数化测试 C++实现代码 #define BOOST_TEST_MAIN #include ...

最新文章

  1. html5测试 2345,HTML5实例测试
  2. VTK:可视化算法之OfficeTube
  3. 使用Capistrano向EC2部署Django代码--关于SSH相关的配置
  4. 从Gradle自动将工件提升到Maven Central
  5. 专门讲讲这个MYSQL授权当中的with grant option的作用
  6. Android kotlin基础语法
  7. java中文乱码decode_Java中文乱码处理
  8. 云存储精华问答 | 云存储是如何工作的?
  9. MDK C++中对内联的极度优化
  10. pycharm pyqt5 pyrrc_编程基础 | Pycharm安装、配置、快捷键
  11. 地图的四着色 (CSU-1508)
  12. 神经网络技巧篇之寻找最优参数的方法
  13. Multiload-ng
  14. amoeba安装与简单使用(一)
  15. Android Studio第一个NDK程序
  16. Android网络框架情景分析之NetworkManagementService和Netd交互深入分析一
  17. delphi微信授权登陆
  18. 垃圾回收算法-标记清扫回收
  19. 土星环年龄很轻?卡西尼号探测船坠毁前传送珍贵数据
  20. linux查看文件内容行数,Linux 中如何查看文件的行数,字数,字节数

热门文章

  1. php取结果集,php获取数据库结果集方法(推荐)
  2. java初始化数据报_java – 如何在Docker中初始化数据库后启动flyway
  3. python中left是什么意思_Python left
  4. Qt工作笔记-QSplitter的使用(老版本里面发现的神控件在新版本内使用)
  5. Spring Boot修改添加界面二合一
  6. Qt文档阅读笔记-官方2D Painting Example实例解析
  7. C++静态联编与动态联编
  8. C/C++ OpenCV均值滤波
  9. 如何低格台式计算机的硬盘,最新[电脑如何格式化]台式机如何格式化本地磁盘.doc...
  10. win7系统修复工具_205个电脑系统修复小工具, 联想工程师专用!