在使用 TestNg ITestResult 接口或任何其他 testNg 接口执行测试后,如何调用 TestNg @Test 方法的输入参数的实例

How to call instances of input arguments of TestNg @Test method, after test execution using TestNg ITestResult interface or any other testNg interface

我创建了一个实现 IReporter 接口的自定义报告器,并希望 post 将输入参数测试到最终测试报告中。我的测试输入参数是通过 TestNg Dataprovider 提供的。每个输入参数都是 TestCase class.

的一个实例

我可以在我的报告中获取输入参数,但它只是对象的哈希码,而不是实例本身,我可以从中调用所需的测试数据和 post in html报告。

我能够使用以下代码打印所有输入参数

Set<ITestResult> failedTests = testContext
                    .getFailedTests()
                    .getAllResults();
            for (ITestResult result: failedTests) {
                for (Object param: result.getParameters()) {
                    System.out.println(param);
                }
            }
Output:
data.service.entities.TestCase@1a1da881
org.testng.TestRunner@4dbb42b7

getParameters() 方法 returns 一个对象数组,我不知道如何将其转换为 TestCase。

请指教一种获取实例的方法 data.service.entities.TestCase@1a1da881 为了调用它的方法。

为了获取实例,我创建了 TestNg CustomListener class,我在其中手动将输入参数 (TestCase) 设置为每个已执行测试 ITestResult 的属性:

    public class CustomListener extends TestListenerAdapter {

    @Override
    public void onTestFailure(ITestResult iTestResult) {
        super.onTestFailure(iTestResult);
        TestCase tCase = (TestCase) iTestResult.getParameters()[0];
        iTestResult.setAttribute("failed_case", tCase);
    }

    @Override
    public void onTestSuccess(ITestResult iTestResult) {
        super.onTestSuccess(iTestResult);
        TestCase tCase = (TestCase) iTestResult.getParameters()[0];
        iTestResult.setAttribute("passed_case", tCase);
    }

    @Override
    public void onTestSkipped(ITestResult iTestResult) {
        super.onTestSkipped(iTestResult);
        TestCase tCase = (TestCase) iTestResult.getParameters()[0];
        iTestResult.setAttribute("skipped_case", tCase);
    }
  }

在我的自定义报告 class 中,我得到了每个测试用例的对象,如下所示:

        TestCase failedCase = (TestCase) testResult.getAttribute("failed_case");
        TestCase passedCase = (TestCase) testResult.getAttribute("passed_case");
        TestCase skippedCase = (TestCase) testResult.getAttribute("skipped_case");