TestNG的数据驱动DataProvider

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);
    }

} 

你可能感兴趣的:(TestNG的数据驱动DataProvider)