TestNG-参数化


TestNG支持参数化测试,一种是通过xml文件进行参数化,第二种就是DataProvider参数化

1??通过xml文件

<?xml version="1.0" encoding="UTF-8" ?>
DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="parmsuitename">
    <test name="parm">
        
        <parameter name="name" value="Jack">parameter>
        <parameter name="age" value="25">parameter>
        
        <classes>
            <class name="com.course.testng.parm.ParamterTest">class>
        classes>
    test>
suite>

类代码:需要两个注解,一个是@Test,标注是个测试类;另一个是@Parameters,写着传入的参数

package com.course.testng.parm;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParamterTest {
    @Test
    @Parameters({"age","name"})
    public void paramTest1(int age, String name) {
        System.out.println(age + name);
    }
}

2??通过DataProvider:Object[][]

一、将值直接传递到方法

package com.course.testng.parm;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderTest {
    @Test(dataProvider = "dataDemo")
    public void paramTestByDataProvider(String name, int age) {
        System.out.println("年龄是:" + age + ",姓名是:" + name);
    }

    @DataProvider(name = "dataDemo")
    public Object[][] providerData() {
        Object[][] objects = new Object[][]{
                {"Jack", 25},
                {"Rose", 26}
        };
        return objects;
    }
}

运行结果:

年龄是:25,姓名是:Jack
年龄是:26,姓名是:Rose

===============================================
Default Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================  

二、通过不同的方法名,传递不同的参数值

    @Test(dataProvider = "methodDemo")
    public void methodTest1(String name, int age) {
        System.out.println("Iterator1的年龄是:" + age + ",姓名是:" + name);
    }

    @Test(dataProvider = "methodDemo")
    public void methodTest2(String name, int age) {
        System.out.println("Iterator222年龄是:" + age + ",姓名是:" + name);
    }

    @DataProvider(name = "methodDemo")
    public Object[][] methodDataTest(Method method) { //方法参数中一定要写(Method method),引入的包是:java.lang.reflect.Method
        Object[][] objects = null;
        if (method.getName().equals("methodTest1")) { //根据不同的方法名,传不同的参数值
            objects = new Object[][]{
                    {"张三呢", 23},
                    {"李四呀", 12}
            };
        } else if (method.getName().equals("methodTest2")) {
            objects = new Object[][]{
                    {"gaga", 36},
                    {"justin", 14}
            };
        }
        return objects;
    }

根据方法名,传不同的参数

 通过DataProvider还有一种返回迭代器的方法,下次再补充