所有。我有现有的xml文件testng套件。我想在gradle任务中使用它并以编程方式设置线程计数
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="UiTests">
<test name="UiTests" preserve-order="true">
<packages>
<package name="tests.web">
<exclude name="tests.web.performance"/>
</package>
</packages>
</test>
</suite>
在gradle任务中,我使用useTestNG方法并设置threadCount参数
useTestNG{
suites("src/testы/suites/UiTests.xml")
threadCount 2
setParallel("methods")
}
但它不起作用 - 线程的数量来自xml文件,所以我如何以编程方式设置线程数?
答案 0 :(得分:2)
TestNG套件xml文件中指定的threadcount值具有最终结果。这就是为什么即使你试图通过gradle测试任务中的TestNGOptions设置它,它也不会生效。
要完成此操作,您需要执行以下操作:
org.testng.IAlterSuiteListener
的实现,其中您可以在XmlSuite
级别(<suite>
级别)或XmlTest
级别(<test>
级别更改主题计数。电平)@Listeners
注释(或)注入监听器。有关详细信息,请参阅我的博文here 以下是所有这些在行动中的表现。
测试类看起来像这样
package test;
import org.testng.annotations.Test;
public class ParallelRunner {
@Test(priority = 1)
public void a() {
System.err.println("**" + Thread.currentThread().getId());
}
@Test(priority = 2)
public void b() {
System.err.println("**" + Thread.currentThread().getId());
}
@Test(priority = 3)
public void c() {
System.err.println("**" + Thread.currentThread().getId());
}
@Test(priority = 4)
public void d() {
System.err.println("**" + Thread.currentThread().getId());
}
}
测试听众看起来像这样
public class SuiteAlterer implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
int count = Integer.parseInt(System.getProperty("threadcount", "3"));
XmlSuite suite = suites.get(0);
suite.setDataProviderThreadCount(count);
}
}
Suite xml看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="many_methods_suite" verbose="2">
<listeners>
<listener class-name="com.rationaleemotions.SuiteAlterer"/>
</listeners>
<test name="many_methods_test" parallel="methods">
<classes>
<class name="test.ParallelRunner"/>
</classes>
</test>
</suite>
gradle测试任务如下所示
test {
useTestNG() {
suites 'src/test/resources/krmahadevan.xml'
systemProperties(System.getProperties())
}
testLogging.showStandardStreams = true
}
这是输出
~/temp/example
23:15 $ gradle -Dthreads=2 clean test
> Task :test
Gradle Test Executor 13 STANDARD_ERROR
Altered the suite thread count to 2
Gradle Test Executor 13 STANDARD_OUT
...
... TestNG 6.12 by Cédric Beust (cedric@beust.com)
...
many_methods_suite > many_methods_test > test.ParallelRunner.a STANDARD_ERROR
**14
many_methods_suite > many_methods_test > test.ParallelRunner.b STANDARD_ERROR
**15
many_methods_suite > many_methods_test > test.ParallelRunner.c STANDARD_ERROR
**15
many_methods_suite > many_methods_test > test.ParallelRunner.d STANDARD_ERROR
**15
BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 executed
现在,您可以通过JVM参数-Dthreads