TestNg的数据驱动也是以注解的形式来表达的,使用的注解是 @DataProvider
来看个例子,我们要对一个加法函数做测试
一、通过数据源name属性指定数据源
1、@DataProvider中添加name属性,命名数据源的名称
2、在测试方法中要用到数据源,则要在@Test中加上dataProvider属性并指定其值,即name名称。
public class TestDataProvider {
@DataProvider(name="dataSource001")
public Object[][] dataProvider001(){
return new Object[][]{{1,2},{3,4}};
}
@Test(dataProvider="dataSource001")
public void testDemo001(int a, int b){
int sum = a + b;
System.out.println(a+" + "+b+" = "+sum);
}
}
二、通过数据源的方法名指定数据源
如果不指定其name名称,则数据源的名称为该数据源的方法名
public class TestDataProvider {
@DataProvider
public Object[][] dataProvider002(){
return new Object[][]{{1,2},{3,4}};
}
@Test(dataProvider="dataProvider002")
public void testDemo002(int a, int b){
int sum = a + b;
System.out.println(a+" + "+b+" = "+sum);
}
}
三、通过外部文件导入数据源
1、首先编写一个类型用于处理从xml或者excel文件中获取数据
注意:@DataProvider数据源的方法必须是static的
public class DataSource {
@DataProvider
public static Object[][] dataProviderXml(){
// 伪代码实现
return new Object[][]{{1,2},{3,4}};
}
}
2、通过dataProviderClass指定数据源类名,dataProvider指定数据源方法来实现
public class TestData {
@Test(dataProvider="dataProviderXml",dataProviderClass=DataSource.class)
public void testDemo(int a, int b){
int sum = a + b;
System.out.println(a+" + "+b+" = "+sum);
}
}
四、通过外部文件导入数据源进阶
伪代码实现从xml读取的数据源放入fromXml map中,从excel读取的数据源放入fromExcel map中
public class DataSource {
public Map dataSource(){
Map dataMap = new HashMap();
Object[][] o1 = new Object[][]{{1,2},{3,4}};
dataMap.put("fromXml", o1);
Object[][] o2 = new Object[][]{{5,6},{7,8}};
dataMap.put("fromExcel", o2);
return dataMap;
}
}
测试方法引用时,通过参数Method来指定哪个测试方法对应哪个测试数据源
当 fromXml(int a, int b) 来请求数据源时,method.getName()
返回 fromXml
public class TestData {
@DataProvider
public Object[][] dataProvider(Method method){
DataSource data = new DataSource();
Object[][] obj = data.dataSource().get(method.getName());
return obj;
}
@Test(dataProvider="dataProvider")
public void fromXml(int a, int b){
int sum = a + b;
System.out.println(a+" + "+b+" = "+sum);
}
@Test(dataProvider="dataProvider")
public void fromExcel(int a, int b){
int sum = a + b;
System.out.println(a+" + "+b+" = "+sum);
}
}