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

使用dataprovoder的TestNG并行测试/方法

颛孙嘉玉
2023-03-14

我有一个testNG方法,如下所示:

@Test(dataProvider="takeMyProvider")
public void myTest(String param1, String param2){

    System.out.println(param1 + " " + param2);

}

我的数据提供程序返回10个元素。我的方法将在一个线程中执行10次。这怎么可能平行?举个例子

  • 我想有5个并行的方法。网络驱动程序应该同时打开5个浏览器。在这5个测试并行后,应执行其他5个测试

  • webdriver应该打开10个浏览器,并并行执行所有10个元素

有人有主意吗?

共有3个答案

贲文景
2023-03-14

感谢您的反馈和有用的提示。我的测试可能以任何并行方式运行,但只在一个浏览器实例中运行。

让我们详细介绍一下:

My dataprovider返回一个对象[][]

@Dataprovider(name = "takeMyProvider", parallel = true)
public object[][] myProvider(){
    return new object[][]{{"1", "name1"}, {"2", "name2"} {"3", "name3"}}
}

此测试方法执行三次

@Test(dataProvider="takeMyProvider")
public void myTest(String param1, String param2){

    System.out.println(param1 + " " + param2);

}

但只是在一个浏览器实例中。那不是我想要的。

我希望testNG启动3个chrome实例,并并行执行3个测试。

顺便说一句,我正在硒网格上运行测试。也许有100个节点。当100个节点并行进行此测试时,这将是完美的。甚至1.000,取决于数据提供者。

有人有主意吗?

最好的问候

干浩阔
2023-03-14

TestNG的@Test注释已经有了您想要的内容。。。在某种程度上:

// Execute 10 times with a pool of 5 threads
@Test(invocationCount = 10, threadPoolSize = 5)

这不会完全符合你的第一个场景,也就是说,运行前5个,等待他们完成,运行其他5个。

何骞尧
2023-03-14

您可以通过TestNG中的套件文件定义并行性。以下示例与10个线程并行运行方法:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="MySuiteNameHere" parallel="methods" thread-count="10">

    <test name="Selenium Tests">
        <classes>
            <class name="foo.bar.FooTest"/>
        </classes>
    </test>
</suite>

您还需要注意,您的数据提供程序可以是线程安全的,以允许它不强制方法按顺序运行。

// data providers force single threaded by default
@DataProvider(name = "takeMyProvider", parallel = true)

不过要小心。使用并行方法运行时,TestNG不会创建类对象的新实例。这意味着,如果在测试类对象上保存值,可能会遇到线程问题。

另外请注意,如果将线程数设置为5,则不会等待前5个线程全部完成,然后启动下一个5。它基本上将所有测试方法放入一个队列,然后启动x线程。然后,当队列中的下一个元素可用时,每个线程只需轮询该元素。

 类似资料:
  • 问题内容: 我正在尝试使用testng并行运行自动化测试(Selenium webdriver)。这是我正在运行的节点: 这是我的测试课: } 这是我的xml: 当我运行XML时,我希望我的测试一次在两个线程中的两个浏览器上运行,但是,当我运行XML时,我使两个浏览器实例第一次运行,然后它们分别递增,并且50%测试失败了,您可以看到我正在尝试在每个方法中实例化驱动程序,尽管这不是我的框架如何工作,

  • 这是驱动程序类,它将为每个测试方法创建驱动程序实例。

  • 我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。 下面是我的测试。xml 我有一个测试工具,它初始化了login、common和utils类 在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法 如果我运行测试,我会看到以下问题 两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。 如果我遗漏了什么

  • 附加信息@Saifur我创建了一个单独的基类,在其中我初始化了驱动程序实例。我在@BeForeClass中调用这个实例,在@afterClass中调用driver.quit()。通过在testng.xml中提供两个不同的类,我试图运行这个实例。

  • 我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。

  • 我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类) BaseTest类只有“设置”和“拆卸”,没有其他东西。 当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试) 但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行 为什么?我根本没有做任何