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

    参数化有两种方法:

    第一种:在xml文件中声明

    第二种:用@DataProvider注解

    先介绍第一种方法:

    ParameterTest类:用@Parameters({"name","age"}) 注解声明参数

    package com.janson.parameter;
    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class ParameterTest {
        @Test
        @Parameters({"name","age"})
        public void paramTest(String name,int age) {
            System.out.println("name:"+ name);
            System.out.println("age:"+age);
        }
    }

    在resources文件夹下新建parameter.xml文件:

    注:<parameter>标签中的name需要与上面类中的@Parameters({"name","age"}) 一致

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="parameter">
        <test name="parameterTest">
            <parameter name="name" value="janson"/>
            <parameter name="age" value="22"/>
            <classes>
                <class name="com.ucar.parameter.ParameterTest"/>
            </classes>
        </test>
    </suite>

    执行结果如下:

    name:janson
    age:22

    第二种方法:

    package com.janson.parameter;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    import java.lang.reflect.Method;
    
    public class DataProviderTest {
    
        //演示两个参数
        @Test(dataProvider = "twoParam")
        public void dataProviderTest(String name,int age) {
            System.out.println("name = "+name+";age = "+age);
        }
    
        @DataProvider(name = "twoParam")
        public Object[] provideData() {
            Object[][] o = new Object[][] {
                    {"zhangsan",10},
                    {"lisi",11},
                    {"wangwu",12},
                    {"zhaoliu",13}
            };
            return o;
        }
    
        //演示一个参数
        @Test(dataProvider = "OneParam")
        public void onlyOneDataProvider(int money) {
            System.out.println("my Money is:"+ money+"万");
        }
    
        @DataProvider(name="OneParam")
        public Object[] oneProvideData() {
            Object[] o = new Object[]{
                    100,200,1000,2000
            };
            return o;
        }
    
        //演示多个参数
        @Test(dataProvider = "manyParam")
        public void manyDataProvider(String name,int age,String nation,int height) {
            System.out.println("name:"+name+",age:"+age+",nation:"+nation+",height:"+height);
        }
    
        @DataProvider(name = "manyParam")
        public Object[][] manyProvideData() {
            Object[][] o = new Object[][] {
                    {"A",20,"中国",180},
                    {"B",21,"USA",150},
                    {"C",22,"AUS",160},
                    {"D",23,"CAN",170}
            };
            return o;
        }
    
        //演示根据不同方法传不同的参数
        @Test(dataProvider = "methodData")
        public void test1(String name,int age) {
            System.out.println("test1方法: name="+name+",age="+age);
        }
    
        @Test(dataProvider = "methodData")
        public void test2(String name,int age) {
            System.out.println("test2方法: name="+name+",age="+age);
        }
    
        @DataProvider(name = "methodData")
        public Object[][] provideMethodData(Method method) {
            Object[][] result = null;
            if(method.getName().equals("test1")) {
                result = new Object[][] {
                        {"ZhangSan",30},
                        {"LiSi",31}
                };
            }else if(method.getName().equals("test2")) {
                result = new Object[][] {
                        {"WangWu",40},
                        {"ZhaoLiu",41}
                };
            }
            return result;
        }
    }

    执行结果如下:

    ---两个参数---
    name = zhangsan;age = 10 name = lisi;age = 11 name = wangwu;age = 12 name = zhaoliu;age = 13

    ---多个参数--- name:A,age:
    20,nation:中国,height:180 name:B,age:21,nation:USA,height:150 name:C,age:22,nation:AUS,height:160 name:D,age:23,nation:CAN,height:170

    ---一个参数--- my Money is:100万 my Money is:200万 my Money is:1000万 my Money is:2000万

    ---根据不同方法传入不同参数---
    test1方法: name
    =ZhangSan,age=30 test1方法: name=LiSi,age=31
    test2方法: name=WangWu,age=40 test2方法: name=ZhaoLiu,age=41

     补充:如果被引用数据源在另一个测试类中定义的,还需要指明其所在测试类,示例如下:

     @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
    
      public void test(Integer n) {
    
        // ...
    
      }
  • 相关阅读:
    使用postman玩转接口测试
    使用virtualbox安装centos虚拟机,以及VirtualBox无法安装64位Linux CentOS的解决办法
    pytest学习笔记(三)
    【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)
    some tips
    python连mysql时避免出现乱码
    我回来啦_(:з」∠)_
    杂题记录
    日常记录。。。
    网络流
  • 原文地址:https://www.cnblogs.com/janson071/p/10002854.html
Copyright © 2011-2022 走看看