testNG(二)@DataProvider
用例参数化一般使用 @DataProvider, dataProvider作为数据提供者只能返回Object[][]和Iterator<Object[]>类型的数据。
使用场景
普通用例参数化
-
@DataProvider 和 @Test用例在一个类中,@DataProvider 方法可以不必是static
-
@DataProvider 和 @Test用例在不同类中,@DataProvider 方法必须是static,@Test设置属性 DataProviderClass
针对不同用例参数化
如果希望DataProvider对不同的Test方法使用不同的参数,那么
@Test(dataProvider = "provider") public void getFirst(String name, int age) { System.out.println("第一组"+name); } @Test(dataProvider = "provider") public void getSecond(String name, int age) { System.out.println("第二组 " + name); } @DataProvider(name = "provider") public Object[][] provider(Method method) { Object[][] objects; if (method.getName().equals("getFirst")) { //如果调用该DataProvider的函数是getFirst,那么就返回这个数组 objects = new Object[][] { { "cq1", 20 }, { "cq2", 22 } }; } else if (method.getName().equals("getSecond")) { //如果调用该DataProvider的函数是getSecond,那么就返回这个数组 objects = new Object[][] { { "cq3", 20 }, { "cq4", 22 } }; } else { //如果调用该DataProvider的函数不是getFirst也不是getSecond,那么就返回这个数组 objects = new Object[][] { {"cq5",33}, {"cq6",34} }; } return objects; }
dataprovider并发
一个使用@DataProvider参数化的用例可以多线程执行,设置@DataProvide的parallel=true
public class ScenarioDataProvider { @DataProvider(name = "hadoopTest", parallel=true) public static Object [][] hadoopTest(){ return new Object[][]{ ScenarioTestData.hadoopMain, ScenarioTestData.hadoopRun, ScenarioTestData.hadoopDeliverProps }; } }
dp并行执行的线程池容量默认为10,如果要更改并发的数量,也可以在suite tag下指定参数data-provider-thread-count:
<suite name="Testng Parallel Test" data-provider-thread-count="20" >