【问题标题】:testng Parallel testing- avoiding class groupingtestng 并行测试——避免类分组
【发布时间】:2018-04-01 23:49:25
【问题描述】:

我正在尝试使用 testng 并行运行测试,但我的配置存在一些问题。

我有一个包含许多类文件的项目,每个类文件都包含许多测试。

我目前正在使用 parallel='methods' 标志运行测试,以最大化在给定时间运行的测试数量。

我的目标是避免同一类的测试同时运行,同时最大化并行测试的数量。

所以给出一个示例 xml 文件:

<suite>
<test parallel='methods' thread-count=40>
    <classes>
    <class>Class1</class>
    <class>Class2</class>
    </classes>
</test>
</suite>

如果有 40 个可用线程,我希望在任何给定时间运行 40 个测试。

我使用了一个方法拦截器来随机化测试顺序,并且我知道使用 eclipse 调试器可以正常工作,并且可以在每个类中控制顺序。

我的目标是这样的执行:

<Test from class1>
<Test from class2>
<Test from class1>
<Test from class2>

但是每个类都按顺序运行,它们各自的测试并行如下:

<Test from class1>
<Test from class1>
<Test from class2>
<Test from class2>

Class2 只有在 Class1 不再有任何测试要执行时才开始执行。

我尝试过 parallel='classes' 但这会为每个类提供 1 个线程。

是否可以强制执行随机顺序并保持同时运行的测试数量?

我想传递一个随机方法列表,并将执行排队以大致遵循该顺序。

我尝试将这些类分解为单独的套件和测试,但这不符合并行运行 40 个测试的目标,因为每个类中的测试方法数量和每个测试的运行时间都不同方法未知。

我的另一个想法是使用多重继承来组合类,将每个类的测试方法组合成一个类,但是java不支持多重继承,所以这不起作用。

感谢任何阅读本文或提供建议或帮助的人。

编辑:解决可能的重复问题:

另一个问题中提出的解决方案将允许我与多个线程并行运行类,但如果测试在其他测试之前完成,看起来分配给它的线程将不会被使用。

我有超过 2 个要并行化的类,如果我开始为每个测试提供线程,我想我可能会遇到问题 - 对于 10 个类,我将被限制为每个 4 个线程(总共 40 个并行)。我可能会在等待 1 个测试以完成一次运行 4 个方法时遇到 36 个空闲,这可能会抵消实施此解决方案的任何好处。

理想的解决方案应该有一个用于测试的通用线程池,例如基本的单一测试/parallel='methods' 方法。

【问题讨论】:

  • 这个方法允许我用多个线程并行运行类,但是如果一个测试在其他测试之前完成,看起来分配给它的线程将不会被使用。我有超过 2 个要并行化的类,如果我开始为每个测试提供线程,我想我可能会遇到问题 - 如果有 10 个类,我每个类将被限制为 4 个线程(总共 40 个并行)。我可能会卡在等待 1 次测试以完成一次运行 4 种方法,而 36 种方法处于空闲状态。理想的解决方案是有一个用于测试的公共线程池。

标签: java multithreading unit-testing testng


【解决方案1】:

您可以尝试在parallel="methods" 属性附近添加thread-count="40"。如果你没有,也给你的类加上包名。

【讨论】:

  • 抱歉,我在示例伪 xml 中省略了线程计数标志。在我真正的 xml 文件中,我已经定义了它。每个类中的测试并行运行,没有问题。在上面的例子中,如果类 1 和类 2 各有 40 个方法,有 40 个线程,类 1 中的所有方法并行启动,完成,然后类 2 中的所有 40 个方法启动。理想情况下,我希望 class1 和 class2 以某种方式并行执行,例如 parallel='classes' 标志,但具有更多线程。
  • 好的。我想你的问题在这里得到了回答:stackoverflow.com/questions/37874072/….
  • 谢谢。我最终可能会妥协,但我担心我需要按测试方法的数量平均划分类,否则某些测试可能会先完成并留下空闲线程。有没有办法确保测试之间有一个公共线程池?我尝试了在套件级别提供 40 个线程的解决方案 - 但它开始了 2 个测试,每个测试有 40 个线程,总共 80 个 - 试图并行运行。我想我会遇到这种方法的问题 - 尝试最大化执行的并行类的数量,但最小化空闲线程的可能性。
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2019-02-01
  • 1970-01-01
相关资源
最近更新 更多