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

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

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

原文地址:https://www.cnblogs.com/qiaoyeye/p/5038553.html