使用常量类为Testng测试描述创建测试描述

时间:2017-12-01 18:07:33

标签: java testng

我们的自动化框架是用Java编写的,并使用了Testng。我们使用Int注释来标记我们的测试,并提供我们在Gherkin中编写的测试组和描述。我们使用Serenity创建的测试报告

我一直在尝试创建一个静态常量类,我们可以使用它来构建测试描述,以便它处理HTML标记而不是将其放入> stranger @_ @Double @Double (1 :: Int) 本身,以便更容易阅读,因此任何HTML格式测试报告使用的可以在这个类中完成而不是每个

例如:

@Test

实际上看起来像:

String

我目前的代码:

@Test( groups = { TestGroup.One, TestGroup.TWO }, description = 
                "<b>Given</b> I am in Scenario One</br>" +
                "<b>When</b>I do something</br>" +
                "<b>Then</b>I get a result")
        protected void testScript() {
    ...
    }

1 个答案:

答案 0 :(得分:1)

注释属性值必须是Java中的编译时常量。请参阅Java文档中的allowed expressions

在TestNG中,可以通过创建自定义TestNG @Test annotation transformer来完成描述属性的格式设置。

示例代码:

public class MyAnnotationTransformer implements IAnnotationTransformer {

    private static final String GIVEN = "given: ";
    private static final String WHEN = "when: ";
    private static final String THEN = "then: ";

    @Override
    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
        if (testMethod != null) {
            String description = annotation.getDescription();
            if (description != null && !description.isEmpty()) {
                StringBuilder sb = new StringBuilder();
                for (String item : description.split("\\|")) {
                    if (item.startsWith(GIVEN)) {
                        sb.append("<b>Given</b> ").append(item.substring(GIVEN.length())).append("<br />");
                    } else if (item.startsWith(WHEN)) {
                        sb.append("<b>When</b> ").append(item.substring(WHEN.length())).append("<br />");
                    } else if (item.startsWith(THEN)) {
                        sb.append("<b>Then</b> ").append(item.substring(THEN.length())).append("<br />");
                    } else {
                        sb.append(item).append("<br />");
                    }
                }
                description = sb.toString();
                annotation.setDescription(description);
            }
        }
    }
}

然后该方法将注释如下:

@Test( groups = { TestGroup.ONE, TestGroup.TWO }, description =
        "given: I am in Scenario One" +
        "|when: I do something" +
        "|then: I get a result")
protected void testScript() {
    //...
}

注意:在实现自定义TestNG侦听器时,我们需要确保它们由TestNG使用。 (可以在TestNG XML测试套件或through other means中指定监听器。)

在这种情况下得到的描述将是:

<b>Given</b> I am in Scenario One<br /><b>When</b> I do something<br /><b>Then</b> I get a result<br />

我希望这会有所帮助。