zoukankan      html  css  js  c++  java
  • 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();
        }
    }

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

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

  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/qiaoyeye/p/5038553.html
Copyright © 2011-2022 走看看