测试后清除覆盖的 testContext 值

Clearing overridden testContext values after a test

我扩展了 TestListenerAdapter 并添加了我自己的自定义 testName 值。这专门针对我有数据提供者并且我正在使用数据提供者值来设置名称的用例。

侦听器如下所示:

public class CustomListener extends TestListenerAdapter {

    @Override
    public void onTestSuccess(final ITestResult tr) {
        setTestNameInReport(tr);
        super.onTestSuccess(tr);
    }

    @Override
    public void onTestFailure(final ITestResult tr) {
        setTestNameInReport(tr);
        super.onTestSuccess(tr);
    }

    private void setTestNameInReport(final ITestResult tr) {
        try {
            ITestContext ctx = tr.getTestContext();
            Set<String> attributes = ctx.getAttributeNames();
            for ( String x : attributes ) {
                if (x.contains("testName")) {
                    Field method = TestResult.class.getDeclaredField("m_method");
                    System.out.println("Printing the method name: " + method.getName());
                    method.setAccessible(true);
                    method.set(tr, tr.getMethod().clone());
                    Field methodName = BaseTestMethod.class.getDeclaredField("m_methodName");
                    methodName.setAccessible(true);
                    methodName.set(tr.getMethod(), ctx.getAttribute( x ));
                    break;
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我正在设置测试用例中的testName。

但是,有少数情况没有数据提供者并且不需要任何自定义测试名称,如何清除测试上下文值?

您可以使用 ITestContextremoveAttribute() 方法。这样代码看起来像:

@AfterMethod()
public void clearContext(ITestContext context){
    context.removeAttribute("testName");
}