当前位置: 首页 > 知识库问答 >
问题:

并行运行在TestNG中不起作用,如果是通用数据提供者

戚英逸
2023-03-14

我正在尝试并行运行我的测试,如果我的数据提供程序存在于我的@Test所在的同一类中,则一切正常。

然而,如果我将DataProvider放在一个单独的类中,并行运行有时运行良好,有时会失败。

以下是我的常用数据提供者代码

@DataProvider(name = "dp",parallel=true)
public static Object[][] getData(Method m) {

    String sheetName = m.getName();

    int rows = excel.getRowCount(sheetName);

    int cols = excel.getColumnCount(sheetName);

    Object[][] data = new Object[rows - 1][1];

    Hashtable<String, String> table = null;

    for (int rowNum = 2; rowNum <= rows; rowNum++) { // 2

        table = new Hashtable<String, String>();

        for (int colNum = 0; colNum < cols; colNum++) {

            // data[0][0]
            table.put(excel.getCellData(sheetName, colNum, 1), excel.getCellData(sheetName, colNum, rowNum));
            data[rowNum - 2][0] = table;
        }

    }

    return data;

}

下面是我的一个“测试”

@Test(dataProviderclass = TestUtil.class,name="dp")
public void doLogin1(HashTable<String,String>data) throws InterruptedException {

    openBrowserLaunchURL(data.get("browser"));

    HomePage homePage = new HomePage();
    homePage.gotoLogin().doSignIn(data.get("username"), data.get("password")).doLogout();

    quitBrowser();

}

共有1个答案

彭烨熠
2023-03-14

TestNG需要在同一@Test本身(包含@Test注释的类)中的所有集成注释。

您可以做的是,使用公共DataProvider代码:

您需要在每个类中定义 DataProvider 声明,以及可以在 Separate 方法中定义其背后的逻辑/代码,您可以在任何类中公开调用该方法。

示例示例

@DataProvider(name = "dp",parallel=true)
public static Object[][] getData(Method m) {
   return readerUtility.demogetData();    
}

普通阅读器类:

public class readerUtility {

  public Object[][] demogetData(){

  String sheetName = m.getName();

    int rows = excel.getRowCount(sheetName);
    int cols = excel.getColumnCount(sheetName);
    Object[][] data = new Object[rows - 1][1];

    Hashtable<String, String> table = null;
    for (int rowNum = 2; rowNum <= rows; rowNum++) { 

        table = new Hashtable<String, String>();
        for (int colNum = 0; colNum < cols; colNum++) {
            table.put(excel.getCellData(sheetName, colNum, 1),excel.getCellData(sheetName, colNum, rowNum));
            data[rowNum - 2][0] = table;
        }
    }
  return data;
  }
} 
 类似资料:
  • suite name=“knowledgetest”verbose=“5”configfailurepolicy=“continue”data-provider-thread-count=“10”parallel=“methods”thread-count=“5”

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

  • 我的Java类没有运行。我有一个带有Apache POI的@DataProvider来从Excel文件中读取数据并在网页中设置该值。但是脚本以没有测试发现错误结束。这是我的代码: 这是我在eclipse控制台中的输出。 [TestNG]未找到测试。未运行任何内容用法:[选项]要运行的XML套件文件选项:-alwaysrunlisteners即使跳过的方法也应该运行方法调用监听器默认值:true-c

  • 我有一个TestNG测试方法,使用数据提供程序使用多个参数运行: 有时我想并行运行检查测试,有时则不想。我可以通过将代码注释设置为DataProvider(parallel=true)或DataProvider(parallel=false)来控制这一点,但我希望将其作为运行时参数,而不是代码中的设置。 如何设置数据提供程序是否在TestNG套件XML文件中作为命令行参数或属性派生多个线程?

  • 我正在使用TestNG和Selenium WebDriver为webapp编写测试套件。 我需要的是为不同的经过身份验证的用户多次运行测试类的所有方法(数据在运行时从数据库中取出)。因此,我需要将一个数据传递给带有数据提供者的类,该类提供所有用户的凭据,然后为每个用户创建一个web驱动程序(为了实验的纯度),并在方法中使用提供的凭据进行验证,运行该类的所有方法,并制作一个分解关闭web驱动程序。