zoukankan      html  css  js  c++  java
  • TestNG 参数化测试

    一、前言

      在自动化测试项目中,参数化是必不可少的,以下将会介绍TestNG中的参数化测试运用。

      TestNG可以通过两种不同的方式将参数直接传递给测试方法:

    • 使用testng.xml
    • 使用数据提供者

    二、使用testng.xml传送参数

    1、示例代码如下:

    package com.tech.design;
    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class Case {
        @Test
        @Parameters({"username","password"})
        public void Login(String username, String password){
            System.out.println("您的用户名是:"+username);
            System.out.println("您的密码是:"+password);
        }
    }

    2、xml配置如下:

    <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
    
    <suite name="Suite1" verbose="1" >
        <test name="param">
            <parameter name="username" value="李白"></parameter>
            <parameter name="password" value="123456"></parameter>
            <classes>
                <class name="com.tech.design.Case"></class>
            </classes>
        </test>
    </suite>

    3、运行xml,结果如下:

    三、使用@DataProvider传递参数

      如果需要传递复杂的参数或java创建的对象(复杂对象、从属性文件或数据库读取数据等),通过testng.xml文件的方式可能不太适合。这种情况可以使用数据驱动的方式为你的测试提供数据。数据库驱动是在类中定义一个方法,返回一组数据对象。该方法使用@DataProvider注解。

      此处需要注意,传参的类型必须要一致,且带有@DataProvider注解的函数返回的必然是Object[][],此处需要注意。

      通过DataProvider,返回值分别是Object[][]和Iterator<Object[]>

    1、返回值是Object[][],代码如下:

    package com.tech.design;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class Case {
    
        @DataProvider(name = "data")
        public Object[][] provideData(){
            return new Object[][] { {"李白",100},{"杜甫",110},{"鲁班",210} };
        }
      //若调用者和提供在不同的类,则写法如下
      //
    @Test(dataProvider = "data",dataProviderClass = Case.class)
        @Test(dataProvider = "data")
        public void Test(String par1, int par2){
            System.out.println("姓名:"+par1+","+"年龄:"+par2);
        }
    
    }

    2、返回值是Iterator<Object[]>,代码如下:

      输出:

      4

      5

    package com.tech.design;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class Case {
        @DataProvider(name="testdp")
        public static Iterator<Object[]> createData() {
            HashSet<Integer> set = new HashSet<Integer>();
            set.add(Integer.valueOf(4));
            set.add(Integer.valueOf(5));
    
            HashSet<Object[]> so = new HashSet<Object[]>();
            for(Integer intg:set){
                so.add(new Object[]{intg});
            }
    
            return so.iterator();
        }
    
        @Test(dataProvider="testdp")
        public void login(Integer caseNum) {
            System.out.println(caseNum);
        }
    
    }

    3、dataProvider方法可接受 的参数:Method method, ITestContext context

      参数可以传其中一个,也可以两个一起传入,这里只演示Method参数,

      用处:当多个测试方法使用同一个@DataProvider提供的测试数据,并希望不同的测试方法返回不同的值时,这是很有用的方式

      示例:定义1个数据提供方法和2个测试方法。

    package com.tech.design;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    import java.lang.reflect.Method;public class Case {
        @DataProvider(name = "datapro")
        public Object[][] Data(Method method){
            System.out.println("当前测试方法为:"+method.getName());
            Object[] S1 = new Object[]{"李白"};
            Object[] S2 = new Object[]{"张楚"};
            if(method.getName().equals("Test2")){
                return new Object[][] {S1};
            }else {
                return new Object[][] {S2};
            }
        }
    
        @Test(dataProvider = "datapro")
        public void Test1(String s){
            System.out.println(s);
        }
        @Test(dataProvider = "datapro")
        public void Test2(String s){
            System.out.println(s);
        }
    
    }

  • 相关阅读:
    Java 8 ThreadLocal 源码解析
    RabbitMQ 消息中间件
    MySQL 索引与查询优化
    MySQL EXPLAIN 命令: 查看查询执行计划
    迎来送往,开启新篇章
    mockito的用法
    推荐一个计算机的科普视频
    Golang查缺补漏(一)
    2019定个小目标
    golang 中的指针
  • 原文地址:https://www.cnblogs.com/Chilam007/p/15613213.html
Copyright © 2011-2022 走看看