testNG(二)@DataProvider

作用

用例参数化一般使用 @DataProvider, dataProvider作为数据提供者只能返回Object[][]和Iterator<Object[]>类型的数据。

使用场景

普通用例参数化

  • @DataProvider 和 @Test用例在一个类中,@DataProvider 方法可以不必是static

  • @DataProvider 和 @Test用例在不同类中,@DataProvider 方法必须是static,@Test设置属性 DataProviderClass

针对不同用例参数化

如果希望DataProvider对不同的Test方法使用不同的参数,那么在DataProvider中可以使用Method参数

@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" >

在这个suite中,使用这个dp的所有@Test,会有一个线程池(线程数=10)去并发执行它们,这个线程的作用域仅在这个suite中。

 

posted @ 2022-06-12 17:41  huiyii  阅读(597)  评论(0编辑  收藏  举报