TestNG提供了两种参数化的方式,一种是通过XML,一种是通过代码实现,下面对这两种方式做介绍。
一、通过xml
/***
*
*
*
*
* @Title: paraFromXML
* @Description: Parameters from testng.xml
*@paramname
*@parampwd
*@returnvoid
*@throws
*/@Parameters({"username","password"})
@Testpublic voidparaFromXML(String name, String pwd) {
System.out.println(name+","+pwd);//print admin,123456
}
二、通过DataProvider,返回值分别是Object[][]和Iterator
返回值是Object[][]
1.DataProvider提供者和调用者在同一个类
@DataProvider(name="testdp")publicObject[][] createData() {return newObject[][] {
{"张三", new Integer(36) },
{"李四", new Integer(37)},
};
}/*** @Title: paraFromDP
* @Description: Parameters from DataProvider in one class
*@paramname
*@paramit
*@returnvoid
*@throws
*/@Test(dataProvider="testdp")public voidparaFromDP(String name, Integer it) {
System.out.println(name+", "+it);//print//张三, 36//李四, 37
}
2.DataProvider提供者和调用者在不同的类
DataProvider调用类:
packagetest.testng;importorg.testng.annotations.DataProvider;importorg.testng.annotations.Parameters;importorg.testng.annotations.Test;/***@authorQiaoJiafei
*@version创建时间:2015年12月11日 上午10:30:35
* 类说明*/
public classTestParameters {/*** @Title: paraFromDPA
* @Description: Parameters from DataProvider in another class
*@paramnum
*@returnvoid
*@throws
*/@Test(dataProvider= "create", dataProviderClass = StaticProvider.class)public voidparaFromDPA(Integer num) {
System.out.println(num);//print 42
}
}
DataProvider提供类:
packagetest.testng;importorg.testng.annotations.DataProvider;/***@authorQiaoJiafei
*@version创建时间:2015年12月11日 上午11:34:01
* 类说明*/
public classStaticProvider {
@DataProvider(name= "create")public staticObject[][] createData() {return newObject[][] {new Object[] { new Integer(42) }
};
}
}
返回值是Iterator
3.1数据源提供类
packagecom.data;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.HashSet;importjava.util.Iterator;importjava.util.List;importorg.apache.poi.hslf.model.Sheet;importorg.testng.annotations.DataProvider;/***@authorQiaoJiafei
*@version创建时间:2016年1月20日 上午11:58:26
* 类说明*/
public classTestD {
@DataProvider(name="testdp")public static IteratorcreateData() {
HashSet set = new HashSet();
set.add(Integer.valueOf(4));
set.add(Integer.valueOf(5));
HashSet so = new HashSet();for(Integer intg:set){
so.add(newObject[]{intg});
}returnso.iterator();
}
}
3.2 测试调用类
packagecom.data;importorg.testng.annotations.Test;/***@authorQiaoJiafei
*@version创建时间:2016年1月20日 上午11:58:34
* 类说明*/
public classTestT {
@Test(dataProvider="testdp",dataProviderClass = TestD.class)public voidlogin(Integer caseNum) {
System.out.println(caseNum);
}
}
输出:
4
5
三、dataProvider方法可接受 的参数:Methodmethod,ITestContextcontext,如:
packagecom.data;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.HashSet;importjava.util.Iterator;importjava.util.List;importorg.apache.poi.hslf.model.Sheet;importorg.testng.ITestContext;importorg.testng.annotations.DataProvider;/***@authorQiaoJiafei
*@version创建时间:2016年1月20日 上午11:58:26
* 类说明*/
public classTestD {
@DataProvider(name="testdp")public static IteratorcreateData(Method method, ITestContext context) {
System.out.println("-----------"+method.getName());
System.out.println("-----------"+context.getName());
HashSet set = new HashSet();
set.add(Integer.valueOf(4));
set.add(Integer.valueOf(5));
HashSet so = new HashSet();for(Integer intg:set){
so.add(newObject[]{intg});
}returnso.iterator();
}
}
注意:参数可以传其中一个,也可以两个一起传入
四.参数化后,在测试报告的显示如下图: