首页 > 解决方案 > TestNG 并行数据提供者

问题描述

我想在与数据提供者并行的类中运行测试方法。我需要一个数据提供者,每次在新的测试方法开始为给定的测试运行生成部分动态数据之前都会调用它。让我用伪代码解释一下:

@DataProvider(parallel=true)
public Object[][] dp(){
  User user = createNewUser();
  return new Object[][]{
            {"s1", new AExtendsOtherObject(user), user},
            {"s2", new BExtendsOtherObject("any"), user},
}

@Test(dataProvider = "dp")
void test(String s, OtherObject o, User user){
}

<suite name="all" verbose="1" parallel="methods" data-provider-thread-count="5">

我怎么能做到这一点?

标签: javatestngtestng-dataprovider

解决方案


好的,所以现在我意识到我真正想要的是我的问题看起来有点愚蠢。对此感到抱歉。无论如何,这是我的解决方案:

@DataProvider(parallel=true)
public Iterator<Object[]> dp(){
  List<Object[]> list = new ArrayList<>();
  User user = createNewUser();
  list.add(new Object[]{"s1", new AExtendsOtherObject(user), user});
  user = createNewUser();
  list.add(new Object[] {"s2", new BExtendsOtherObject("any"), user});        
  return list.iterator();
}

此解决方案的唯一问题是,如果 createNewUser() 需要很长时间,那么它会在任何测试方法开始之前立即将其提前。


推荐阅读