一、什么是参数化测试?
通过XML/@Parameters/@DataProvider将参数传递给@Test方法。
参数化使开发人员可以每次使用不同的值运行测试。将测试数据与测试代码解耦。
二、如何使用?
TestNG可以通过两种不同的方式将参数直接传递给测试方法:
- 使用testing.xml
- 使用数据提供者@DataProvider
三、案例
案例1-testng.xml
ParamterTest.java
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParamterTest {
@Parameters({"name","age"})
@Test
public void paramTest1(String name,int age){
System.out.println("name = " + name + "; age = " + age);
}
}
Paramter.xml
<?xml version="1.0" encoding="UTF-8" ?>
<suite name="parameter">
<test name="param">
<classes>
<parameter name="name" value="zhangsan"/>
<parameter name="age" value="10"/>
<!--加上ParamterTest,就可以使用xml执行ParamterTest类内的测试了-->
<class name="com.course.testng.paramter.ParamterTest"/>
</classes>
</test>
</suite>
执行Paramter.xml,结果如下
案例2-DataProvider
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderTest {
@Test(dataProvider = "provideInfo")
public void test(String name, int age) {
System.out.println(name + ": " + age);
}
@DataProvider(name = "provideInfo")
public Object[][] provideData() {
return new Object[][] { { "张三", 30 }, { "李四", 40 }, { "王五", 50 } };
}
}
执行DataProviderTest ,结果如下
案例3-DataProvider+方法
根据测试方法名称传递不同的参数。
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.lang.reflect.Method;
public class DataProviderTest {
@Test(dataProvider = "provideInfo")
public void test1(String name, int age) {
System.out.println(name + ": " + age);
}
@Test(dataProvider = "provideInfo")
public void test2(int id, int age) {
System.out.println(id + ": " + age);
}
@DataProvider(name = "provideInfo")
public Object[][] provideData(Method method) {
if (method.getName().equals("test1")){
return new Object[][] { { "张三", 30 }, { "李四", 40 }, { "王五", 50 } };
} else if (method.getName().equals("test2")){
return new Object[][] { { 1, 30 }, { 2, 40 }, { 3, 50 } };
}
return null;
}
}
执行DataProviderTest,结果如下