Java Test Automation - отчет о тестовых примерах к экстенту - PullRequest
0 голосов
/ 29 июня 2018

Я создал новую аннотацию

@Target(ElementType.METHOD)
public @interface DisplayName {
    String value() ; 
}

То, что я хотел использовать, чтобы определить имя тестового примера в отчете экстента. На тестовом примере:

@Test
@DisplayName("testcase title")
public void TestCase_1() throws InterruptedException {...}

В TestListener мне теперь удалось установить заголовок тестового примера, используя поле описания.

    @Override
public void onTestStart(ITestResult iTestResult) {
    System.out.println("I am in onTestStart method " + getTestMethodName(iTestResult) + " start");
    // Start operation for extentreports.
    ExtentTestManager.startTest(iTestResult.getMethod().getDescription(), iTestResult.getMethod().getDescription());
}

Я хотел бы использовать аннотацию @DisplayName в качестве заголовка тестового примера, но я не знаю, как получить значение аннотации в TestListener.

Заранее спасибо!

РЕШЕНИЕ __________________ С большой помощью @Kovacic __________________ SOLUTION

Окончательный результат:

Класс аннотации:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DisplayName {
    String value();
}

Класс TestListener:

........
@Override
    public void onTestStart(ITestResult iTestResult) {

        String valueFromInterface = null;

        Method method = iTestResult.getMethod().getConstructorOrMethod().getMethod();

        if (method.isAnnotationPresent(DisplayName.class)) {
            DisplayName displayName = method.getAnnotation(DisplayName.class);
            if (displayName != null) {
              valueFromInterface = displayName.value();
            }
        }

        ExtentTestManager.startTest(valueFromInterface, iTestResult.getMethod().getDescription());
    }

........

1 Ответ

0 голосов
/ 16 июля 2018

Надеюсь, я понял этот вопрос, вот решение

если вы используете это как интерфейс:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ITestrail {
    public @interface DisplayName {
        String value() ; 
    }

Также Вам необходимо добавить в Ваш интерфейс (строка ниже):

@Retention(RetentionPolicy.RUNTIME)

попробуйте это:

@Override
public void onTestStart(ITestResult result) {

    String valueFromInterface;

    Method method = result.getMethod().getMethod();

    if (method.isAnnotationPresent(DisplayName.class)) {
        DisplayName displayName = method.getAnnotation(DisplayName.class);
        if (displayName != null) {
          valueFromInterface = displayName.value();
        }
    }

    ExtentTestManager.startTest(iTestResult.getMethod().getDescription(), valueFromInterface);
}

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...