У меня есть набор тестов, в котором я хотел бы получить полный список всех тестовых методов TestNG (полностью квалифицированных).

Пример вывода мне нужен:

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

Как мне получить этот список методов?

0
kajk 23 Окт 2018 в 10:35

2 ответа

Лучший ответ

Самый простой способ получить полный список всех методов тестирования - выполнить набор тестов с 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 в определение вашего набора testng.xml:

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

В качестве примечания: если вам нужен только список тестов, которые будут выполнены. Вам нужно только запустить TestNG-runner с определенным слушателем, и после того, как выходной файл будет записан, фактическое выполнение тестов может быть отменено.

0
kajk 24 Окт 2018 в 08:52

Отказ от ответственности: я разработал библиотеку, которая делает это, но предназначена только для отключенных тестов. С помощью всего лишь нескольких модификаций вы можете настроить вывод всех тестов.

Просто перейдите к следующему коду:

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 ().

0
AutomatedOwl 23 Окт 2018 в 15:24
52943528