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(); } }
注意:参数可以传其中一个,也可以两个一起传入
四.参数化后,在测试报告的显示如下图: