我试图使用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>
只有当Class1不再有任何测试要执行时,Class2才会开始执行。
我尝试过并行='类',但这给出了每个类1个线程。
是否可以强制执行随机顺序并保持并行测试的运行量?
我想传递一个随机方法列表,并大致按照顺序排列执行。
我曾尝试将这些类拆分为单独的套件和测试,但这并不能达到并行运行40个测试的目标,因为每个类中有不同数量的测试方法,并且每个测试方法的运行时间未知。
我的另一个想法是使用多重继承组合类,将每个类的测试方法组合成一个类,但是java不支持多重继承,所以这是行不通的。
感谢所有阅读本文或提供建议或帮助的人。
编辑:解决可能的重复:
在另一个问题中提出的解决方案将允许我与多个线程并行运行类,但是如果一个测试在其他线程之前完成,那么为它分配的线程似乎不会被使用。
我有两个以上的类需要并行化,如果我开始给每个测试提供线程,我想我可能会遇到问题——有10个类,每个类只能有4个线程(总共40个并行)。我可能会被困在等待一个测试来完成一次运行4个方法,而36个方法处于空闲状态,这可能会抵消实现此解决方案的任何好处。
理想的解决方案是为测试提供一个公共线程池,比如基本的单测试/并行方法。
您能否尝试在并行="方法"
属性附近添加thread-count="40"
。如果没有,请给您的类提供包名称。
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类) BaseTest类只有“设置”和“拆卸”,没有其他东西。 当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试) 但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行 为什么?我根本没有做任何
共设5个测试班。每一个都使用@Factory(dataprovider=“data”)初始化。我想实现的是,每个测试类中的测试方法应该与dataprovider实例并行运行。此外,测试类应该并行运行。 如下所示。TestClass1应该并行运行dataprovider实例。因此,测试类TestClass1的所有方法将为dataprovider实例并行运行。 data-provider-thread
类TestParallel.FirstTestClass线程ID:22名称:TestNG 类TestParallel.SecondTestClass线程ID:23名称:TestNG 类TestParallel.TestSetup线程ID:23名称:TestNG java.lang.NullPoInterException位于TestParallel.TestSetup.OnTestFailure(
主要内容:1. 在方法上的分组,2. 在类上的分组,3. 其它分组分组测试是TestNG中的一个新的创新功能,它在JUnit框架中是不存在的。 它允许您将方法调度到适当的部分,并执行复杂的测试方法分组。 您不仅可以声明属于某个分组的方法,还可以指定包含其他组的组。 然后调用,并要求其包含一组特定的组(或正则表达式),同时排除另一个分组。 组测试提供了如何分区测试的最大灵活性,如果您想要背靠背运行两组不同的测试,则不需要重新编译任何内容。 使用标记在文件中指定分组