• TestNG @Factory与 @DataProvider 结合使用进行参数化测试


    简介

    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试,TestNG无疑走的更远。可以用于集成测试,这个特性是我选择TestNG的最重要的原因。

    先了解这两个注解的意思

    @DataProvider    标记一个方法用于为测试方法提供数据。被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。

                             从这个DataProvider接收数据@Test方法需要使用一个dataProvider名称等于这个注解的名字。

     
    @Factory    标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]。

    代码

    文件结构

    ├── src/main/java/test/demo/TestFactory.java
    ├── src/main/java/test/demo/LoginPageTest.java
    │── src/main/java/test/demo/HomePageTest.java
    └── src/test/resources/smokeTest.xml
     1 package test.demo;
     2 
     3 import org.testng.annotations.DataProvider;
     4 import org.testng.annotations.Factory;
     5 
     6 /**
     7  * @Description: Demo
     8  * @author wadexu
     9  * 
    10  * @updateUser
    11  * @updateDate
    12  */
    13 public class TestFactory {
    14 
    15     @DataProvider(name = "datasource")
    16     public Object[][] datasource() {
    17 
    18         // Creating and filling result array
    19         Object[][] credentials = new Object[2][2];
    20 
    21         credentials[0][0] = "User1";
    22         credentials[0][1] = "WadeXu";
    23 
    24         credentials[1][0] = "User2";
    25         credentials[1][1] = "JamesBond";
    26 
    27         return credentials;
    28     }
    29 
    30     @Factory(dataProvider = "datasource")
    31     public Object[] createTest(String userID, String userName) {
    32 
    33         Object[] tests = new Object[2];
    34 
    35         tests[0] = new HomePageTest(userID, userName);
    36         tests[1] = new LoginPageTest(userID, userName);
    37 
    38         return tests;
    39     }
    40 
    41 
    42 }

    TestFactory工厂类,在带有@Factory注解的方法中调用被执行的测试类,TestNg会自动调用被执行类中带有@Test注解的方法,被执行的测试类为:HomePageTest LoginPageTest

    使用@DataProvider作为数据注入的方式,向Factory中注入数据,并执行测试。

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html 

     1 package test.demo;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 /**
     6  * @Description: Demo Login Page
     7  * @author wadexu
     8  * 
     9  * @updateUser
    10  * @updateDate
    11  */
    12 public class LoginPageTest {
    13 
    14     private String userID;
    15     private String userName;
    16 
    17     public LoginPageTest(String userID, String userName) {
    18         this.userID = userID;
    19         this.userName = userName;
    20     }
    21 
    22     @Test
    23     public void testLogin() {
    24         // for demo purpose only
    25         System.out.println(userID + " - " + userName + " is testing Login page");
    26     }
    27 
    28 }
     1 package test.demo;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 /**
     6  * @Description: Demo Home Page
     7  * @author wadexu
     8  * 
     9  * @updateUser
    10  * @updateDate
    11  */
    12 public class HomePageTest {
    13 
    14     private String userID;
    15     private String userName;
    16 
    17     public HomePageTest(String userID, String userName) {
    18         this.userID = userID;
    19         this.userName = userName;
    20     }
    21 
    22     
    23     @Test
    24     public void testHomePage() {
    25         System.out.println(userID + " - " + userName + " is testing Home page");
    26     }
    27 
    28 }

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html 

    TestNG xml配置文件如下

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <!--<suite name="DMP_Test_Suite" -->
    <suite name="Demo_Test_Suite" parallel="false">
        <test name="Demo_Test">
            <classes>
                <class name="test.demo.TestFactory" />
            </classes>
        </test> 
    </suite>

    右击xml文件Run as TestNG

    Test Result:

    Console output:

    User1 - WadeXu is testing Home page
    User2 - JamesBond is testing Home page
    User1 - WadeXu is testing Login page
    User2 - JamesBond is testing Login page

    注意测试方法将被一共执行的次数,@DataProvider属于循环测试的类型。

    TestNG更多功能请参考官方站点

    感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4761275.html 

  • 相关阅读:
    前端开发资料、实用小工具
    冒泡排序法,二分查找法
    数组练习
    一维数组练习题
    for循环输出菱形
    练习题
    课堂练习
    gO语言的安装和环境变量的配置
    PO BO VO DTO POJO DAO 概念及其作用
    BaseServlet
  • 原文地址:https://www.cnblogs.com/wade-xu/p/4761275.html
Copyright © 2020-2023  润新知