TestNg-DataProviders

240 阅读2分钟

@DataProviders注解 被作用的方法被称为数据提供者

  1. 作用于方法上,此方法的返回类型必须为Object类型的二维数组;
  2. name指定提供数据者的名称;
  3. 返回个二维数组;

代码数据提供者示例

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="数据提供者名称") 被作用的方法被称为数据使用者

  1. 由@Test(dataProvider="xxx")指定具体的数据使用者;
  2. 数据提供者返回的二维数组长度决定数据使用者执行的次数;

代码数据使用者示例

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

数据使用者数据提供者的查找范围

  1. 当前测试类;
  2. 当前测试类的基类;
  3. 非当前测试类和它的基类提供;

数据提供者在当前测试类的基类中

数据提供者在父类

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

    }
}

用例输出如下

image.png 注意点

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

    }
}

用例输出

image.png 注意点

1.数据使用者在使用时必须使用 dataProviderClas指定到具体的数据提供者所在的类; 2. 官方文档,数据提供者所在的方法必须用static关键字进行修饰; 3. 示例代码中并没有使用static修饰,运行也未报错(最好使用staic)