我想使用Gradle和TestNG / JUnit实现某种压力测试。
我发现https://stackoverflow.com/a/41650455可以与JUnit完美配合,但不能与TestNG一起使用。我创建了一个小仓库来显示我的问题:
https://github.com/dhardtke/gradle-testng-stresstest
如果我运行gradlew stressTestJUnit
,我会正确收到
JUnitTests > testNothing STANDARD_ERROR
I am a JUnit test!
JUnitTests > testNothing STANDARD_ERROR
I am a JUnit test!
JUnitTests > testNothing STANDARD_ERROR
I am a JUnit test!
JUnitTests > testNothing STANDARD_ERROR
I am a JUnit test!
JUnitTests > testNothing STANDARD_ERROR
I am a JUnit test!
但是在运行
gradlew stressTestTestNG
时,我只会收到:Gradle suite > Gradle test > TestNGTests.testNothing STANDARD_ERROR
I am a TestNG test!
我已经尝试找出在执行TestNG测试而不是JUnit测试时Gradle有什么不同之处,但是还无法弄清楚(尚未):https://github.com/gradle/gradle/tree/master/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/testng
最佳答案
我终于找到了解决方法:
build.gradle:
task testNG(type: StressTest) {
useTestNG() {
options.listeners << "core.test.TestNgStressTestListener"
environment "times", times
environment "stressTest", true
}
}
和我的
TestNgStressTestListener
类:@Override
public void alter(final List<XmlSuite> suites) {
final boolean stressTest = Boolean.parseBoolean(System.getenv("stressTest"));
if (stressTest) {
final int times = Integer.parseInt(System.getenv("times"));
final XmlSuite base = suites.get(0);
suites.clear();
final String baseName = base.getName();
for (int i = 0; i < times; i++) {
final XmlSuite copy = (XmlSuite) base.clone();
copy.setName(String.format("%s (%d)", baseName, i + 1));
suites.add(copy);
}
}
}
给定的侦听器仅复制第一个
XmlSuite
并更改其名称(否则在TestNG内部引发Exception)。奇迹般有效!
关于java - 多次运行TestNG测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47116859/