如何根据测试类型在测试运行中使用 different/specific 'teardown method'

How to use a different/specific 'teardown method' withing a testrun based on the type of test

我正在创建一个测试框架来测试应用程序的 UI 和它使用的 REST API。因此,例如,在执行 REST GET 调用后,我检查返回的数据是否与 UI 中的数据匹配,并且在 post 成功后(由 UI 测试启动)我将检查通过执行另一个 GET 调用和比较数据来获取数据。 我将 Java 与 TestNG、Selenium 一起使用,并将(可能)使用 REST Assured。

我对 TestNG 有点陌生,但我如何根据 运行 的测试类型执行不同的拆卸操作?例如,对于 UI 测试,我在测试失败时截图,但对于失败的 REST 测试,显然没有意义,我想捕获请求和响应并将该信息添加到报告中。

我还在构思这个框架,所以我没有相关的代码可以分享,但这是一个很笼统的问题,我很烦,希望你们能回答。

尝试通过 @AfterGroups 注释

好的,我已经通过创建自定义注释 (@UITest) 解决了这个问题。在 TestNG @beforeClass 中,我检查哪些方法具有 @UITest 注释并将它们添加到列表中。

@BeforeClass
public void getUiTestMethods() {
    Method[] methods = getClass().getMethods();
    for (Method method: methods) {
        if(method.isAnnotationPresent(UiTest.class)) {
            UiTestMethods.add(method.getName());
        }
    }
}

在@afterClass(拆解)方法中,我然后使用从 ITestResult 获得的方法名称并检查该方法是否在@beforeClass 中创建的列表中。

if (UiTestMethods.contains(result.getMethod().getMethodName())) {
                // do stuff
}

这样我就可以区分失败测试的处理方式。 这可能不是 best/cleanest 的方法,但至少它有效。

如果有人有更好的建议,我仍然愿意接受。