A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2019-4-1 09:05  /  1040 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在testNG的另一个有趣的功能是参数测试。在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试。参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值。

testNG直接传递参数测试方法有两种不同的方式:

     使用testng.xml

     数据提供程序

传递参数使用testng.xml

在testng.xml文件中定义的简单参数,然后在源文件中引用这些参数。

创建测试案例

     创建一个Java测试类ParametreriedTest1.java

     测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数

     添加注释@Parameter(“myName”)到此方法。该参数将被传递testng.xml

package depends;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest1 {
    @Test
    @Parameters("myName")
    public void parameterTest(String myName) {
        System.out.println("Parameterized value is : " + myName);
    }
}
创建testng.xml文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test1">
        <parameter name="myName" value="manisha"/>
        <classes>
            <class name="depends.ParameterizedTest1" />
            </classes>
    </test>
</suite>

我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值

测试结果


TestNG对testng.xml 的参数的类型指定的值会自动尝试转换。下面是

package data;

public class PrimeNumberChecker {
    public Boolean validate(final Integer primeNumber) {
        for (int i = 2; i < (primeNumber / 2); i++) {
            if (primeNumber % i == 0) {
                return false;
             }
        }
        return true;
    }
}


支持的类型:
String     int/Integer   boolean/Boolean    byte/Byte char     Character

double/Double  float/Float   long/Long     short/Short

传递参数与数据提供者

当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。

第一个例子是@DataProvider的使用Vector,String或Integer作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。

实例1

在这里@DataProvider通过整数和布尔参数

创建Java类

package data;

public class PrimeNumberChecker {
    public Boolean validate(final Integer primeNumber) {
        for (int i = 2; i < (primeNumber / 2); i++) {
            if (primeNumber % i == 0) {
                return false;
             }
        }
        return true;
    }
}
创建测试案例类

·       创建一个Java测试类ParamTestWithDataProvider1.java.

·       定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。

·       测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。

·      添加注释@Test(dataProvider= "test1")到此方法。dataProvider的属性被映射到"test1".

package data;

import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider1 {
    private PrimeNumberChecker primeNumberChecker;

    @BeforeMethod
    public void initialize() {
        primeNumberChecker = new PrimeNumberChecker();
    }

    @DataProvider(name = "test1")
    public static Object[][] primeNumbers() {
        return new Object[][] { { 2, true }, { 6, false }, { 19, true },
                { 22, false }, { 23, true } };
    }

    // This test will run 4 times since we have 5 parameters defined
    @Test(dataProvider = "test1")
    public void testPrimeNumberChecker(Integer inputNumber,
        Boolean expectedResult) {
        System.out.println(inputNumber + " " + expectedResult);
        Assert.assertEquals(expectedResult,
                primeNumberChecker.validate(inputNumber));
    }
}

创建testng.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test1">
        <classes>
            <class name="data.ParamTestWithDataProvider1" />
            </classes>
    </test>
</suite>

测试结果


实例2

@DataProvider传递对象作为参数

创建Java类

package data;

public class Bean {
    private String val;
    private int i;
    public Bean(String val, int i){
        this.val=val;
        this.i=i;
    }
    public String getVal() {
        return val;
    }
    public void setVal(String val) {
        this.val = val;
    }
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }
}

创建测试案例类

·       创建一个Java测试类 ParamTestWithDataProvider2.java.

·       定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。

·       添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。

·       添加注释@Test(dataProvider = "test1")到此方法. dataProvider 属性被映射到 "test1".

package data;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider2 {
    @DataProvider(name = "test1")
    public static Object[][] primeNumbers() {
        return new Object[][] { { new Bean("hi I am the bean", 111) } };
    }

    @Test(dataProvider = "test1")
    public void testMethod(Bean myBean) {
        System.out.println(myBean.getVal() + " " + myBean.getI());
    }
}
<span style="font-family: 宋体; font-size: 12pt; background-color: rgb(255, 255, 255);">创建testng.xml</span>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
    <test name="test1">
        <classes>
            <class name="data.ParamTestWithDataProvider2" />
            </classes>
    </test>
</suite>
测试结果


---------------------
【转载,仅作分享,侵删】
作者:若海音符
来源:CSDN
原文:https://blog.csdn.net/Chenyt01/article/details/51771665
版权声明:本文为博主原创文章,转载请附上博文链接!

20160627221056661.png

1 个回复

倒序浏览
奈斯,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马