关于testNG中的数据源参数化,有常见的两种形式:
1、通过xml的形式
2、通过@DataProvider注解实现
1、通过xml的形式:
添加testMath.xml文件
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="parameter">
<test name="parameterTest">
<parameter name="name" value="janson"/>
<parameter name="age" value="22"/>
<classes>
<class name="com.lingyue.xmf.auto.test.common.local.demo.Testc"/>
</classes>
</test>
</suite>
在XML文件中,通过parameter标签,添加属性数据,注意class标签中需要写完整的测试类路径
编写测试类paramTest
@Test
@Parameters({"name","age"})
public void paramTest(String name,int age){
System.out.println("name: " + name);
System.out.println("age: " + age);
}
执行XML文件后,结果如下:
2、通过@DataProvider注解实现
①单个数据的注入,执行测试case时,@Test中的dataProvider属性内容要与@DataProvider注解中的name属性内容一致
//单个参数
@DataProvider(name = "twoParam")
public Object[] provideDate(){
Object[][] o = new Object[][] {
{"zhangsan",10},
{"lisi",11},
{"wangwu",12},
{"zhaoliu",13}
};
return o;
}
@Test(dataProvider = "twoParam")
public void dateProvideTest(String name, int age){
System.out.println("name = "+name+";age = "+age);
}
执行结果:
②多个参数,执行测试case时,@Test中的dataProvider属性内容要与@DataProvider注解中的name属性内容一致
//多个参数
@DataProvider(name = "manyParam")
public Object[][] manyProvideData() {
Object[][] o = new Object[][]{
{"A", 20, "中国", 180},
{"B", 21, "USA", 150},
{"C", 22, "AUS", 160},
{"D", 23, "CAN", 170}
};
return o;
}
@Test(dataProvider = "manyParam")
public void manyDataProvider(String name,int age,String nation,int height) {
System.out.println("name:"+name+",age:"+age+",nation:"+nation+",height:"+height);
}
执行结果:
③定义根据不同方法返回不同的值,@Test中的dataProvider属性内容要与@DataProvider注解中的name属性内容一致,调用的方法名称要与equals中的判断内容一致
//根据不同方法返回不同的值
@DataProvider(name = "methodData")
public Object[][] provideMethodData(Method method){
Object[][] result = null;
if (method.getName().equals("test1")){
result = new Object[][] {
{"ZhangSan",30},
{"LiSi",31}
};
}else if (method.getName().equals("test2")){
result = new Object[][] {
{"WangWu",40},
{"ZhaoLiu",41}
};
}else {
System.out.println("数据注入未找到调用的方法名");
}
return result;
}
@Test(dataProvider = "methodData")
public void test1(String name,int age){
System.out.println("test1方法: name="+name+",age="+age);
}
@Test(dataProvider = "methodData")
public void test2(String name,int age){
System.out.println("test2方法: name="+name+",age="+age);
}
执行结果如下:
当在其他类中调用dataProvider时,需要dataProviderClass属性加上对应的class类文件路径
@Test(dataProvider = "methodData",dataProviderClass = com.lingyue.xmf.auto.test.common.local.demo.DataProviderTest.class)
public void test1(String name, int age){
System.out.println("test1方法: name="+name+",age="+age);
}
执行结果:
参考原文链接:
https://www.cnblogs.com/janson071/p/10002854.html