我有一个testNG方法,如下所示:
@Test(dataProvider="takeMyProvider")
public void myTest(String param1, String param2){
System.out.println(param1 + " " + param2);
}
我的数据提供程序返回10个元素。我的方法将在一个线程中执行10次。这怎么可能平行?举个例子
或
有人有主意吗?
感谢您的反馈和有用的提示。我的测试可能以任何并行方式运行,但只在一个浏览器实例中运行。
让我们详细介绍一下:
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,取决于数据提供者。
有人有主意吗?
最好的问候
TestNG的@Test
注释已经有了您想要的内容。。。在某种程度上:
// Execute 10 times with a pool of 5 threads
@Test(invocationCount = 10, threadPoolSize = 5)
这不会完全符合你的第一个场景,也就是说,运行前5个,等待他们完成,运行其他5个。
您可以通过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)时,代码工作,测试并行运行 为什么?我根本没有做任何