Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java testng并行测试-避免类分组_Java_Multithreading_Unit Testing_Testng - Fatal编程技术网

Java testng并行测试-避免类分组

Java testng并行测试-避免类分组,java,multithreading,unit-testing,testng,Java,Multithreading,Unit Testing,Testng,我试图使用testng并行运行测试,但我的配置有一些问题 我有一个包含许多类文件的项目,每个类文件包含许多测试 我目前正在使用parallel='methods'标志运行测试,以最大化在给定时间运行的测试数量 我的目标是避免同一类的测试同时运行,同时最大化并行测试的数量 因此,给出一个示例xml文件: <suite> <test parallel='methods' thread-count=40> <classes> <class>

我试图使用testng并行运行测试,但我的配置有一些问题

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

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

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

因此,给出一个示例xml文件:

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

第一类
类别2
给定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>

只有当Class1不再有任何测试要执行时,Class2才会开始执行

我已经尝试了parallel='classes',但这给了每个类1个线程

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

我想传递一个随机方法列表,并大致按照顺序排列执行

我曾尝试将类拆分为单独的套件和测试,但是这并不能满足40个测试并行运行的目标,因为每个类中有不同数量的测试方法,并且每个测试方法的运行时间未知

我的另一个想法是使用多重继承来组合类,将每个类的测试方法组合成一个类,但是java不支持多重继承,因此无法工作

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

编辑:寻址可能的重复项:

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

我有两个以上的类需要并行化,如果我开始为每个测试提供线程,我想我可能会遇到问题——有10个类,我将限制为每个线程4个(总共40个并行)。我可能会被困在等待一个测试来完成一次运行4个方法,36个方法处于空闲状态,这可能会否定实现此解决方案的任何好处


理想的解决方案是为测试提供一个公共线程池,如基本的单测试/parallel='methods'方法。

能否尝试在
parallel='methods'
属性附近添加
thread count=“40”
。如果没有,请给类提供包名。

对不起,我在示例伪xml中省略了线程计数标志。在我真正的xml文件中,我定义了它。每个类中的测试并行运行,没有问题。在上面的例子中,如果类1和类2都有40个方法,每个都有40个线程,那么类1中的所有方法都并行启动,完成,然后类2中的所有40个方法都启动。理想情况下,我希望class1和class2能够并行执行,比如parallel='classes'标志,但需要更多线程。好的。我想你的问题在这里得到了回答:。谢谢。我可能会以折衷的方式结束这一过程,但我担心我需要按照测试方法的数量平均划分类,否则一些测试可能会首先完成,并留下空闲线程。有没有办法确保测试之间有一个公共线程池?我在套件级别尝试了提供40个线程的解决方案,但它启动了两个测试,每个测试40个线程,总共80个线程,试图并行运行。我想这个方法会有问题-试图最大化执行的并行类的数量,但尽量减少空闲线程的可能性。这个方法的可能重复将允许我与多个线程并行运行类,但是如果一个测试在其他线程之前完成,看起来不会使用为其分配的线程。我有两个以上的类需要并行化,如果我开始为每个测试提供线程,我想我可能会遇到问题——有10个类,我将限制为每个线程4个(总共40个并行)。我可能会被困在等待一个测试来完成一次运行4个方法,而36个方法处于空闲状态。理想的解决方案是为测试提供一个公共线程池。