6

我正在尝试使用 Testrail 作为测试用例管理系统,因此将 testrail 与 Jenkins 集成会很有用。

这就是我想要实现的目标:

假设我在 testrail 中手动创建了三个测试用例,用例 ID 为 C1、C2 和 C3,这些测试用例将具有一些独特的自动化测试名称,例如 A1、A2 和 A3(在更多信息中,testrail 中将有一个字段为如此独特的信息)

当我点击“开始自动测试”按钮并从 testrail 运行 Jenkins 作业时(考虑到我已经为具有此按钮的 testrail 实现了 UI 脚本):

UI 脚本输出

,我想运行一个脚本/东西来获取所选测试用例的用例 ID,并将这些 ID 临时注释到实际的 Java 测试中,以便它可以运行这些特定的测试并将结果发布回 Testrail。

我能想到的方法:

当我点击 Testrail 上的“开始自动化测试”按钮时,我可以创建一个脚本来运行以创建一个 XML 文件,该文件将包含来自 Testrail 所需的选定测试用例。然后,此 XML 将作为 Jenkins 作业的默认输入提供,它将运行 XML 文件中提到的测试用例。此 XML 将是临时的,每次从 Testrail 中进行选择时都会被替换。然而,你是怎么做到的?我是 Testrail 的新手并阅读了它的 API,看起来 API 将有助于将结果发布回 Testrail。但是,我们如何实现 ID 的映射呢?

此外,任何关于将结果发布回 Testrail 的建议都会很有用。

4

1 回答 1

3

这不是 TestNG 特定的,但您可以在 java 中进行自定义注释。您可以通过 api 在测试运行中通过测试 ID(使用 add_result)或案例 ID 和运行 ID(使用 add_result_for_case)更新 TestRail 测试。http://docs.gurock.com/testrail-api2/reference-results

case id 永远不会改变,所以你可以在你的测试中硬编码这些。

这是我为此目的使用的:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestData
{
    int testId() default 0;
    String[] tags() default "";
}

然后我的测试方法看起来像这样(使用 Junit,但与其他框架应该没有太大不同):

@Test
@TestData(
        testId = 177,
        tags = {"smoke", "authentication"}
)
public void testName()
{
    //Do the test
}

然后,我使用特定于 JUnit 的方法来获取要在我的拆卸方法中使用的测试方法名称,但我确信有多种方法可以做到这一点。一旦你有了测试方法名称,我就是这样阅读注释的:

@After
public void baseTearDown() throws Exception
{
    //Good place to record test results
    Method testMethod = getClass().getMethod(testName);
    if(testMethod.isAnnotationPresent(TestData.class))
    {
        TestData testData = testMethod.getAnnotation(TestData.class);
        //Do something with testData.testId();
        System.out.println("Test ID = " + testData.testId());
    }

    //other cleanups
}

这个 mkyong 链接提供了一些非常基本的示例,它们既可以创建注释,也可以通过反射阅读它。这是我以前开始的: https ://www.mkyong.com/java/java-custom-annotations-example/

如果您在代码中开始测试运行,那么您只需跟踪测试运行 id 并根据需要使用它。如果没有,我的偏好是使用 Jenkins 或您的代码可以从中读取的其他脚本来定义和设置一些环境变量,这样您就不必处理为一些真正基本的键值对传递文件

于 2016-07-18T22:34:35.757 回答