zoukankan      html  css  js  c++  java
  • TestNG参数化测试之DataProvider用法

    添加依赖

      <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.8.8</version>
          <scope>test</scope>
      </dependency>
    

    使用DataProvider提供数据有两种形式:

    1. 把测试代码和测试数据放在同一个类中;
    2. 把所有的数据提供都单独写在一个类里面,当测试数据比较多时,这种方法利于维护。

    用法

    1. 常规用法

    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class ParamTestWithDataProvider1 {
        @DataProvider(name = "test1")
        public static Object[][] primeNumbers() {
            return new Object[][] { { 2, true ,"hi"}, { 6, false ,"test"}, { 19, true ,"good"},
                    { 22, false ,"aha"}, { 23, true ,"loo"} };
        }
        
        //参数必须要一致
        @Test(dataProvider = "test1")
        public void testPrimeNumberChecker(Integer inputNumber,
                                           Boolean expectedResult, String test) {
            System.out.println(inputNumber + " " + expectedResult+" "+test);
        }
    }
    

    2. 带Method参数的DataProvider

    如果希望DataProvider对不同的Test方法使用不同的dataprovider,那么在DataProvider中可以使用Method参数

    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    import java.lang.reflect.Method;
    
    public class ParamTestWithDataProvider2 {
        @Test(dataProvider = "provider")
        public void getFirst(String name, int age) {
            System.out.println("第一组"+name);
        }
        
        @Test(dataProvider = "provider")
        public void getSecond(String name, int age) {
            System.out.println("第二组 " + name);
        }
        
        @DataProvider(name = "provider")
        public Object[][] provider(Method method) {
            Object[][] objects;
            if (method.getName().equals("getFirst")) {              //如果调用该DataProvider的函数是getFirst,那么就返回这个数组
                objects = new Object[][] { { "cq1", 20 }, { "cq2", 22 } };
            } else if (method.getName().equals("getSecond")) {//如果调用该DataProvider的函数是getSecond,那么就返回这个数组
                objects = new Object[][] { { "cq3", 20 }, { "cq4", 22 } };
            } else {                                                                    //如果调用该DataProvider的函数不是getFirst也不是getSecond,那么就返回这个数组
                objects = new Object[][] { {"cq5",33}, {"cq6",34} };
            }
            
            return objects;
        }
    }
    

    3. 通过DataProviderClass 把测试数据文件引过来

    import org.testng.annotations.DataProvider;
    
    public class DataProviderMethod {
        //无指定数据名称,默认使用方法名
        @DataProvider
        public static Object[][] NoNameMethod(){
            return new Object[][]{
                    {"DataWithNoName1"},
                    {"DataWithNoName2"},
                    {"DataWithNoName3"}
            };
        }
        //指定名称1
        @DataProvider(name="dataprovider1")
        public static Object[][] dataProvider1(){
            return new Object[][]{
                    {"dataprovider1-1"},
                    {"dataprovider1-2"}
            };
        }
        //指定名称2
        @DataProvider(name="dataprovider2")
        public static Object[][] dataProvider2(){
            return new Object[][]{
                    {"dataprovider2-1"},
                    {"dataprovider2-2"}
            };
        }
    }
    
    import org.testng.annotations.Test;
    
    public class ParamTestWithDataProvider3 {
        @Test(dataProvider="NoNameMethod",dataProviderClass=DataProviderMethod.class)
        public void doTestNG(String testdatas) {
            System.out.println("未指定名称,数据源名为方法名NoNameMethod:"+testdatas);
        }
        
        @
    Test(dataProvider="dataprovider1",dataProviderClass=DataProviderMethod.class)
        public void doTestNG1(String testdatas){
            System.out.println("指定名称,数据源名称选择了dataprovider1:"+testdatas);
        }
        
        @Test(dataProvider="dataprovider2",dataProviderClass=DataProviderMethod.class)
        public void doTestNG2(String testdatas){
            System.out.println("指定名称,数据源名称选择了dataprovider2:"+testdatas);
        }
    }
    
    

    4. 带懒加载的数据驱动,@DataProvider标记的方法除了可以返回数组外,还可以返回一个Iterator,这样的好处是不用把所有的测试数据都加载到内存中,而是需要的时候就读一条。

    参考

    1. https://www.cnblogs.com/beifucangqiong/p/11246988.html
    2. https://www.cnblogs.com/beifucangqiong/p/11266894.html
    3. https://www.cnblogs.com/lixiaowei395659729/p/8717992.html
    4. https://blog.csdn.net/wangjie0925/article/details/80653935
    5. https://blog.csdn.net/qq_30353203/article/details/77865040
  • 相关阅读:
    读书笔记 之《Thinking in Java》(对象、集合、异常)
    ArrayList 和 LinkedList的执行效率比较
    Hybris CronJob.
    C# 中的treeview绑定数据库(递归算法)
    identity_insert---实验性插入大批量数据和分页存储过程
    SQL Server 存储过程
    PL/SQL 在64位机上不能使用的问题解决
    登陆Oracle11g的企业管理器
    SQL在oracle和SQLserver将查询结果创建为新表的不同之处
    介绍一下内联、左联、右联
  • 原文地址:https://www.cnblogs.com/zendwang/p/14467227.html
Copyright © 2011-2022 走看看