如何并行运行测试用例?

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&lt;test-case&gt;.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 并行运行。但我收到错误,因为 '最后一个单元没有足够的有效位'

以上是关于如何并行运行测试用例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TestNG 中并行运行测试用例?

如何在机器人框架中并行运行多个测试套件上的多个测试用例 | Python

如何使 JUnit 测试用例按顺序运行?

多个线程(并行测试用例)如何使用Java(Selenium)设置中的Apache POI同时访问同一个excel文件?

如何在负载测试中将一个数据源用于多个测试用例

Selenium 网格 - 测试不是并行运行,而是在每个模拟器上运行两次