提起testNG,很多人都知道TestNG比Junit更有优势的地方,除了可以做依赖性测试之外,也可以用TestNG实现参数化测试。
那么TestNG中的参数化是如何做的呢?
首先我们看第一种参数化测试的方式–使用TestNG.xml
首先写一个TestNG参数化测试用例。使用 @Parameters(“参数化变量”) 注解的办法。
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文件中指定参数化的变量名称,与参数化的变量值。
<?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>
第二种测试方法就是 – 使用 Data Providers
为了展示这种方法,我们需要先写一个被测试的类。
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;
}
}
在测试类中使用@Test(dataProvider = “test1”)注解引用事先定义好的 @DataProvider(name = “test1”)的数据。
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));
}
}
最终执行结果如下:
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1