zoukankan      html  css  js  c++  java
  • testng入门教程10 TestNG参数化测试

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

    TestNG让你直接传递参数测试方法两种不同的方式:

    • 使用testng.xml

    • 数据提供程序

    传递参数使用testng.xml

    有了这种技术,在testng.xml文件中定义的简单参数,然后在源文件中引用这些参数。让我们看看下面的例子中如何使用这种技术来传递参数。

    创建测试案例类

    • 创建一个Java测试类 ParameterizedTest1.java.

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

    • 添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。

    创建Java类文件名 ParameterizedTest1.java 在 C: > TestNG_WORKSPACE

    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

    创建 testng.xml C: > TestNG_WORKSPACE 执行测试案例

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

    编译使用javac的测试用例类。

    C:TestNG_WORKSPACE>javac ParameterizedTest1.java
    

    现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。

    C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml
    

    验证输出。

    Parameterized value is : manisha
    
    ===============================================
    Suite1
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================
    

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

    • 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类

    创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C: > TestNG_WORKSPACE

    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".

    创建Java类文件名ParamTestWithDataProvider1.java 在 C: > TestNG_WORKSPACE

    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

    创建 testng.xml C: > TestNG_WORKSPACE 执行测试案例。

    <?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="ParamTestWithDataProvider1" />
    	    </classes>
        </test>
    </suite>

    编译使用javac的测试用例类。

    C:TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
    

    运行testng.xml.

    C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml
    

    验证输出。

    2 true
    6 false
    19 true
    22 false
    23 true
    
    ===============================================
    Suite1
    Total tests run: 5, Failures: 0, Skips: 0
    ===============================================
    

    实例 2

    在这里,@DataProvider 传递对象作为参数。

    创建Java类

    创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C: > TestNG_WORKSPACE.

    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".

    创建Java类文件名 ParamTestWithDataProvider2.java 在 C: > TestNG_WORKSPACE

    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());
        }
    }

    创建 TESTNG.XML

    创建一个文件 testng.xml C: > TestNG_WORKSPACE 来执行测试用例.

    <?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="ParamTestWithDataProvider2" />
    	    </classes>
        </test>
    </suite>

    编译使用javac的测试用例类。

    C:TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
    

    运行 testng.xml.

    C:TestNG_WORKSPACE>java -cp "C:TestNG_WORKSPACE" org.testng.TestNG testng.xml
    

    验证输出。

    hi I am the bean 111
    
    ===============================================
    Suite1
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================



    文章转载自:易百教程 [http://www.yiibai.com]
    本文标题:TestNG参数化测试
    转载请保留原文链接:http://www.yiibai.com/html/testng/2013/0916303.html
  • 相关阅读:
    数据库web项目对数据库的操作
    Java中的反射机制
    Java中的注解
    CSS3与弹性盒布局
    MySQL存储过程实现分页及变量的定义
    开博第一文
    mpy开发物联网系列:1.mpy与服务器数据库方案
    VBS常用方法
    VBS统计页面加载时间脚本
    Ubantu系统下安装Mysql问题:configure: error: No curses/termcap library found
  • 原文地址:https://www.cnblogs.com/111testing/p/6185113.html
Copyright © 2011-2022 走看看