如何列出获取所有TestNG测试方法的列表

时间:2018-10-23 07:35:21

标签: testng

我有一个测试套件,我想在其中获得所有TestNG测试方法的完整列表(完全合格)。

我需要的示例输出:

com.package.SomeTest.testSomething
com.package.OtherTest.testOtherThing

如何获取此方法列表?

2 个答案:

答案 0 :(得分:0)

获取所有测试方法的完整列表的最简单方法是使用org.testng.ISuiteListener执行测试套件。该侦听器将获得完全填充的ISuite,其中提供了将执行的所有测试方法的List


ISuiteListener提供了一种onStart方法,该方法在执行任何测试方法之前被调用。这样,我们就可以获取将要执行的所有测试方法的列表,并将它们写入文件中。

这是我使用过的ISuiteListener

package helper;

import org.testng.ISuite;
import org.testng.ISuiteListener;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class LogSuiteListener implements ISuiteListener {
    @Override
    public void onStart(ISuite suite) {
        try (PrintStream out = new PrintStream(new FileOutputStream("/tmp/test-list.txt"))) {
                suite.getAllMethods().stream()
                .map(m -> m.getTestClass().getName() + "." + m.getMethodName())
                .forEach(out::println);
        } catch (IOException e) {
            System.err.println("FAILED TO WRITE TO FILE!");
            throw new RuntimeException(e);
        }
    }
    @Override
    public void onFinish(ISuite suite) {}
}

在此示例中,我使用的是Lambdas,但是onStart方法也可以使用Java8之前的功能重写,如下所示:

for (ITestNGMethod m : suite.getAllMethods()) {
    out.println(m.getTestClass.getName() + "." + m.getMethodName());
}

要将侦听器添加到TestNG-Suite,只需将以下XML侦听的XML添加到您的testng.xml套件定义中:

<listeners>
    <listener class-name="helper.LogSuiteListener"/>
</listeners>

作为旁注:如果仅需要测试列表,将执行该列表。您只需要在定义了侦听器的情况下启动TestNG-runner,然后在写入输出文件后即可取消测试的实际执行。

答案 1 :(得分:0)

免责声明:我已经开发了library,但它对禁用测试的特殊性。只需进行一些修改,就可以将其设置为输出所有测试。

只需转到以下代码:

while (matcher.find()) {
    if (matcher.group().contains("enabled = false") | matcher.group().contains("enabled=false")) {
        Matcher disabledTestMatcher = DISABLED_TEST_REGEX_EXPRESSION.matcher(matcher.group());
        disabledTestMatcher.find();

        // Add extracted test and remove all its strings but test name.
        extractedTests.add(disabledTestMatcher.group()
                .replace("void", "")
                .replace("{", "")
                .replace("()",""));
    }

并删除整个'if'子句并输出matcher.group()。