使用数据提供者传递参数
当需要传递复杂参数或需要从Java创建的参数(复杂对象、从属性文件或数据库中读取的对象等)时,可以使用Dataproviders来传递参数。
数据提供者是一种用注释的方法 @DataProvider. 这个注解只有一个字符串属性:它的名字。如果未提供名称,数据提供者的名称将自动默认为方法的名称。数据提供者返回一个对象数组。
以下示例演示了如何使用数据提供程序。第一个例子是关于@DataProvider 使用Vector、String 或Integer 作为参数,第二个例子是关于@DataProvider 使用对象作为参数。
示例 1
在这里,@DataProvider 传递 Integer 和 Boolean 作为参数。
Create Java class
创建一个名为 PrimeNumberChecker.java 的 java 类。此类检查数字是否为素数。创建这个类/work/testng/src.
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 在 /work/testng/src.
-
定义 primeNumbers() 方法,该方法使用注释定义为数据提供者。此方法返回一个对象数组。
-
将测试方法 testPrimeNumberChecker() 添加到您的测试类。此方法采用整数和布尔值作为输入参数。此方法验证传递的参数是否为素数。
-
向该方法添加注解@Test(dataProvider = "test1")。属性 dataProvider 映射到“test1”。
以下是内容 ParamTestWithDataProvider1.java.
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));
}
}
Create testng.xml
创建一个 testng.xml /work/testng/src 执行测试用例。
<?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 编译测试用例类。
/work/testng/src$ javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
现在,运行 testng.xml。
/work/testng/src$ java 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 将 Object 作为参数传递。
Create Java class
创建一个java类Bean.java,它是一个带有get/set方法的简单对象,在 /work/testng/src.
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;
}
}
Create Test Case Class
-
创建一个 java 测试类,比如 ParamTestWithDataProvider2.java。
-
定义 primeNumbers() 方法,该方法被定义为使用注解的数据提供者。此方法返回一个对象数组。
-
将测试方法 testMethod() 添加到您的测试类。此方法将对象 bean 作为参数。
-
向该方法添加注解@Test(dataProvider = "test1")。属性 dataProvider 映射到“test1”。
在其中创建一个名为 ParamTestWithDataProvider2.java 的 java 类文件 /work/testng/src.
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());
}
}
Create testng.xml
在中创建 testng.xml /work/testng/src 执行测试用例。
<?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 编译测试用例类。
/work/testng/src$ javac ParamTestWithDataProvider2.java Bean.java
现在,运行 testng.xml。
/work/testng/src$ java org.testng.TestNG testng.xml
验证输出。
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================