簡體   English   中英

多次運行TestNG測試

[英]Running TestNG tests multiple times

我想使用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)。

奇跡般有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM