美文网首页
TestNG的数据驱动DataProvider

TestNG的数据驱动DataProvider

作者: BestFei | 来源:发表于2020-04-15 15:49 被阅读0次

    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<String, Object[][]> dataSource(){
            Map<String, Object[][]> dataMap = new HashMap<String, Object[][]>();
            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

          本文链接:https://www.haomeiwen.com/subject/tfwqvhtx.html