Annotating/Fetching/mappingTestrail测试用例ID到本地JavaTestNG测试(Jenkins Test Rail Integration)

Annotating/Fetching/mapping Testrail test case ID to the local Java TestNG test (Jenkins Test Rail Integration)

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

这就是我想要实现的:

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

当我点击 "Start Automated Tests" 按钮和 运行 来自 testrail 的 Jenkins 作业时(考虑到我已经为具有此按钮的 testrail 实现了 UI 脚本):

,我想 运行 一个 script/something 获取所选测试用例的案例 ID,并暂时将这些 ID 注释到实际的 Java 测试,以便它可以 运行 那些特定的测试和 post 结果返回到 Testrail。

我能想到的方法:

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

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

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

案例 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 link 给出了一些非常基本的例子,包括创建注释和反射读取注释。这是我用来开始的: https://www.mkyong.com/java/java-custom-annotations-example/

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