• TestNG之参数化


    TestNG提供了两种参数化的方式,一种是通过XML,一种是通过代码实现,下面对这两种方式做介绍。

    一、通过xml

        /** 
        *   <suite name="Suite" parallel="false">
        *   <!-- XML中增加一下两行 -->
        *   <parameter name="username"  value="admin"/>
          *    <parameter name="password"  value="123456"/>
        * 
        * @Title: paraFromXML 
        * @Description: Parameters from testng.xml
        * @param name
        * @param pwd
        * @return void
        * @throws 
        */
        @Parameters({"username","password"})
        @Test
        public void paraFromXML(String name, String pwd) {
            System.out.println(name+","+pwd);
            //print admin,123456
        }

    二、通过DataProvider,返回值分别是Object[][]和Iterator<Object[]>

    返回值是Object[][]

    1.DataProvider提供者和调用者在同一个类

        @DataProvider(name="testdp")
        public Object[][] createData() {
             return new Object[][] {
               { "张三", new Integer(36) },
               { "李四", new Integer(37)},
             };
            }
        
        /** 
        * @Title: paraFromDP 
        * @Description: Parameters from DataProvider in one class
        * @param name
        * @param it
        * @return void
        * @throws 
        */
        @Test(dataProvider="testdp")
        public void paraFromDP(String name, Integer it) {
            System.out.println(name+", "+it);
            //print
            //张三, 36
            //李四, 37
        }

    2.DataProvider提供者和调用者在不同的类

    DataProvider调用类:

    package test.testng;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    /** 
     * @author QiaoJiafei 
     * @version 创建时间:2015年12月11日 上午10:30:35 
     * 类说明 
     */
    public class TestParameters {
        /** 
        * @Title: paraFromDPA 
        * @Description: Parameters from DataProvider in another class
        * @param num
        * @return void
        * @throws 
        */
        @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
        public void paraFromDPA(Integer num) {
            System.out.println(num);
            //print 42
        }
        
    }

    DataProvider提供类:

    package test.testng;
    
    import org.testng.annotations.DataProvider;
    
    /** 
     * @author QiaoJiafei 
     * @version 创建时间:2015年12月11日 上午11:34:01 
     * 类说明 
     */
    public class StaticProvider {
         @DataProvider(name = "create")
         public static Object[][] createData() {
             return new Object[][] {
                new Object[] { new Integer(42) }
            };
         }
    }

    返回值是Iterator<Object[]>

    3.1数据源提供类

    package com.data;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.poi.hslf.model.Sheet;
    import org.testng.annotations.DataProvider;
    
    /** 
     * @author QiaoJiafei 
     * @version 创建时间:2016年1月20日 上午11:58:26 
     * 类说明 
     */
    public class TestD {
        @DataProvider(name="testdp")
        public static Iterator<Object[]> createData() {
            HashSet<Integer> set = new HashSet<Integer>();
            set.add(Integer.valueOf(4));
            set.add(Integer.valueOf(5));
            
            HashSet<Object[]> so = new HashSet<Object[]>();
            for(Integer intg:set){
                so.add(new Object[]{intg});
            }
            
            return so.iterator();
        }
    }

    3.2 测试调用类

    package com.data;
    
    import org.testng.annotations.Test;
    
    /** 
     * @author QiaoJiafei 
     * @version 创建时间:2016年1月20日 上午11:58:34 
     * 类说明 
     */
    public class TestT {
        @Test(dataProvider="testdp",dataProviderClass = TestD.class)
        public void login(Integer caseNum) {
            System.out.println(caseNum);
        }
    }

    输出:

    4
    5

    三、dataProvider方法可接受 的参数:Method method, ITestContext context,如:

    package com.data;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.poi.hslf.model.Sheet;
    import org.testng.ITestContext;
    import org.testng.annotations.DataProvider;
    
    /** 
     * @author QiaoJiafei 
     * @version 创建时间:2016年1月20日 上午11:58:26 
     * 类说明 
     */
    public class TestD {
        @DataProvider(name="testdp")
        public static Iterator<Object[]> createData(Method method, ITestContext context) {
            System.out.println("-----------"+method.getName());
            System.out.println("-----------"+context.getName());
            HashSet<Integer> set = new HashSet<Integer>();
            set.add(Integer.valueOf(4));
            set.add(Integer.valueOf(5));
            
            HashSet<Object[]> so = new HashSet<Object[]>();
            for(Integer intg:set){
                so.add(new Object[]{intg});
            }
            
            return so.iterator();
        }
    }

    注意:参数可以传其中一个,也可以两个一起传入

    四.参数化后,在测试报告的显示如下图:

  • 相关阅读:
    程序自动更新版本
    [.NET] Rough Dependency Injection
    Python标准库存储对象(pickle包,cPickle包)
    发送邮件,支持群发
    css3传送带示例
    “计算机之子”的MVVM框架源码学习笔记
    Windows 8 应用商店正式面向全部开发者开放
    MVVM框架 v1发布
    Python学习索引
    注册 windows 8 开发者账号
  • 原文地址:https://www.cnblogs.com/qiaoyeye/p/5038553.html
Copyright © 2020-2023  润新知