@DataProviders注解 被作用的方法被称为数据提供者
- 作用于方法上,此方法的返回类型必须为Object类型的二维数组;
- name指定提供
数据者的名称;- 返回个二维数组;
代码数据提供者示例
package com.benkint.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameter {
// 数据提供者
@DataProvider(name = "data")
Object[][] createData(){
return new Object[][]{
{"hello", 10},
{"world", 20}
};
}
}
@Test(dataProvider="数据提供者名称") 被作用的方法被称为数据使用者
- 由@Test(dataProvider="xxx")指定具体的数据使用者;
数据提供者返回的二维数组长度决定数据使用者执行的次数;
代码数据使用者示例
package com.benkint.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameter {
// 数据使用者
@Test(dataProvider = "data")
void useParameter(String n1, Integer n2){
System.out.println("参数1:" + n1);
System.out.println("参数2:" + n2);
}
// 数据使用者
@Test(dataProvider = "data")
void useParameter(Object[] o){
for (Object o1 : o) {
System.out.println("接受的参数是:" + o1);
}
}
}
数据使用者对数据提供者的查找范围
- 当前测试类;
- 当前测试类的基类;
- 非当前测试类和它的基类提供;
数据提供者在当前测试类的基类中
数据提供者在
父类中
package com.benkint.test;
import org.testng.annotations.DataProvider;
public class TestDataPro {
@DataProvider(name = "useData")
Object[][] createDatas(){
return new Object[][]{
{"hello", 10},
{"world", 20}
};
}
}
测试类为其
子类
package com.benkint.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameter extends TestDataPro {
@DataProvider(name = "data")
Object[][] createData(){
return new Object[][]{
{"hello", 10},
{"world", 20}
};
}
@Test(dataProvider = "data")
void useParameter(String n1, Integer n2){
System.out.println("参数1:" + n1);
System.out.println("参数2:" + n2);
}
@Test(dataProvider = "useData")
void useParameter(Object[] o){
for (Object o1 : o) {
System.out.println("接受的参数是:" + o1);
}
}
}
用例输出如下
注意点
1.子类不要重写父类的
数据提供者方法
数据提供者在非当前测试类和它的基类中
数据提供者类
package com.benkint.test;
import org.testng.annotations.DataProvider;
public class StaticProvider {
@DataProvider(name = "create")
Object[][] create(){
return new Object[][]{
{"hello", "张三"},
{"world", "李四"}
};
}
}
数据使用者类
package com.benkint.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameter{
@Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
void test1(Object[] o){
for (Object o1 : o) {
System.out.println("接受的参数是:" + o1);
}
}
}
用例输出
注意点
1.
数据使用者在使用时必须使用dataProviderClas指定到具体的数据提供者所在的类; 2. 官方文档,数据提供者所在的方法必须用static关键字进行修饰; 3. 示例代码中并没有使用static修饰,运行也未报错(最好使用staic)