如何并行运行测试用例?
Posted
技术标签:
【中文标题】如何并行运行测试用例?【英文标题】:How to run test cases in parallel? 【发布时间】:2019-08-07 15:29:42 【问题描述】:我有一个@Test
方法,我从@Dataprovider
获取测试用例名称。我需要并行运行测试用例:
@Test(dataprovider="testdataprodivder")
public void TestExecution(String arg 1)
/* Read the testcases from dataprovider and execute it*/
@Dataprovider(name="testdataprodivder")
public Object [][]Execution() throws IOException
return new Object[][] "Developer","Team Lead","QA","Business Analyst","DevOps Eng","PMO" ;
如果我想并行运行测试用例 即如果我想同时执行“Developer Team Lead”、“QA”、“Business Analyst”、“DevOps Eng”、“PMO”,我应该怎么做?
5 个浏览器 - 每个浏览器运行不同的测试用例。
TestNG XML:
<suite name="Smoke_Test" parallel="methods" thread-count="5">
<test verbose="2" name="Test1">
<classes>
<class name="Packagename.TestName"/>
</classes>
</test> <!-- Default test -->
</suite> <!-- Default suite -->
【问题讨论】:
【参考方案1】:为了并行运行数据驱动测试,您需要在@DataProvider
中指定parallel=true
。例如:
@Dataprovider(name="testdataprodivder", parallel=true)
public Object [][]Execution() throws IOException
return new Object[][] "Developer","Team Lead","QA","Business Analyst","DevOps Eng","PMO" ;
要指定数据驱动测试使用的线程数,您可以指定data-provider-thread-count
(默认为10)。例如:
<suite name="Smoke_Test" parallel="methods" thread-count="5" data-provider-thread-count="5">
注意:要为代码外的数据驱动测试动态设置并行行为,您可以使用QAF-TestNG extension,您可以使用global.datadriven.parallel
和<test-case>.parallel
properties for data-provider 设置行为。
【讨论】:
谢谢。我可以看到一条消息,因为 最后一个单元没有足够的有效位。结果,我的测试脚本失败了。此外,我正在使用远程 Web 驱动程序执行我的测试脚本Last unit does not have enough valid bits
消息看起来与 TestNG/webdriver 或并行执行无关。能否提供详细的控制台日志?
我收到**'与远程浏览器通信时出错。它可能已经死了。 ** 运行时的消息。如果我通过调试模式运行,它运行成功。怎么样?
它看起来与原始问题不同。您可以检查与 webdriver 问题相关的现有问题,或询问另一个解释 webdriver 问题的单独问题。如果在并行运行时发生这种情况,则需要确保线程安全驱动程序实例。很少有人使用不能用于并行执行的静态驱动程序。像 QAF 这样的框架将确保线程安全的驱动程序。同样,这是单独讨论,然后是原始问题。
非常感谢...我对线程安全进行了一些分析,最终得到了解决方案...【参考方案2】:
好吧,一方面pubic
不是作用域:)——你还有一些更不正确的语法。数据提供者中 Object
后面的空格不应该存在,函数签名应该是
public Object[][] Execution() throws IOException
return new Object[][] "Developer","Team Lead","QA","Business Analyst","DevOps Eng","PMO" ;
接下来,TestExecution
方法中的参数定义不正确。
public void TestExecution(String arg)
// Execute your tests
最后,您必须在使用DataProvider
时将“p”大写。所以这给我们留下了
@Test(dataProvider="testdataprovider")
public void TestExecution(String arg)
/* Read the testcases from dataprovider and execute it*/
@DataProvider(name="testdataprovider")
public Object[][] Execution() throws IOException
return new Object[][] "Developer","Team Lead","QA","Business Analyst","DevOps Eng","PMO" ;
目前我不确定还有什么问题。这和你要找的一样吗?让我知道这是否有帮助。
【讨论】:
谢谢。实际上这是我的错误,我应该说得更清楚。错字。我可以使用 user861594 cmets 并行运行。但我收到错误,因为 '最后一个单元没有足够的有效位'以上是关于如何并行运行测试用例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在机器人框架中并行运行多个测试套件上的多个测试用例 | Python