使用 ThreadCount TestNG 限制并行测试的数量
Posted
技术标签:
【中文标题】使用 ThreadCount TestNG 限制并行测试的数量【英文标题】:Limiting the number of parallel tests with ThreadCount TestNG 【发布时间】:2016-09-15 06:08:34 【问题描述】:我这里有一个挠头,我不知道如何处理。我有几个通过 xml 运行的测试类。大约 90 个测试类,每个类包含大约 10+ 个@Test
步骤。我配置了一个 selenium 网格,带有 maxSession=5
,因此在单个节点上并行运行的并行浏览器实例不超过 5 个。这是我不明白的部分。假设我用所有这些测试类启动了这个 xml 文件,我设置了我的thread-count=10
,希望一次启动 10 个测试。发生的事情是我的所有测试类都开始了,它们不会在队列中等待(正如我认为将线程数设置为 10 那样),它们会跳过、超时、失败等等。我了解maxSession
如何处理网格上运行的内容,但是当启动 xml 时,我如何限制开始的测试类的数量,以免网格过载!
【问题讨论】:
如果您有 90 个测试类并且每个测试类中平均有 10 个测试,您是说所有 900 种方法都是并行启动的吗?您的测试类可以根据您在并行值中设置的内容并行启动。 【参考方案1】:实际上 testNG 可以创建比线程数中定义的线程数更多的线程。这发生在接下来的情况下(列表不准确):
你有@DataProvider 与parallel=true。每个调用的提供程序最多可以占用 dataproviderthreadcount 额外线程(因此,如果 thread-count=10 和 dataproviderthreadcount = 5,您将拥有多达 50 个线程) @Test 的 threadPoolSize > 1 和 invocationCount > 1。每个此类测试都会添加 min(threadPoolSize, invocationCount) 个线程。还要注意网格上 Web 驱动程序测试的超时。因为当你打电话时
WebDriver wd = new RemoteWebDriver(...);
这将暂停您的测试执行,直到 grid-hub 为您提供空闲节点(默认情况下,hub 会一直等待,请参阅 newSessionWaitTimeout 参数)。因此,即使您测试的“活动”阶段只需要 120 秒,总的测试持续时间可能会更长(取决于网格负载、测试类的结构、执行顺序等)
【讨论】:
【参考方案2】:您可以使用parallel
属性来设置并行类。
<suite name="Example" verbose="0" thread-count="5" parallel="classes">
...
</suite>
这里的另一个重点是,你有你的实现 threadsafe 吗?如果没有,那么它将无法正常工作。
【讨论】:
以上是关于使用 ThreadCount TestNG 限制并行测试的数量的主要内容,如果未能解决你的问题,请参考以下文章
JUnit 和 Surefire 并行测试 - ForkCount 和 ThreadCount
Android Gradle 插件DexOptions 配置 ⑧ ( preDexLibraries 属性配置 | threadCount 属性配置 )
text 使用testng项目打开浏览器并使用drivermanager进行chromedriver
从命令提示符运行testng.xml。我有从Maven Project创建的jar。 Surefireplugin并没有解决我的目的