Java测试自动化-“扩展的测试用例注释”报告

时间:2018-06-29 12:11:55

标签: java annotations extentreports

我创建了一个新注释

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

我想用来在范围报告中定义测试用例名称的

。在测试用例上:

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

在TestListener中,我现在设法使用description字段设置测试用例的标题。

    @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__________________解决方案的大力帮助下

最终结果:

注释类:

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 :(得分:1)

我希望我理解了这个问题,这是解决方法

如果您将此用作接口:

@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);
}

希望这会有所帮助,