在测试执行后,如何使用 TestNg ITestResult

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


我可以访问报表中的输入参数,但它只是对象的哈希码,而不是实例本身,我可以从中调用所需的测试数据并发布在 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() 方法返回一个对象数组,我不知道如何将其转换为 TestCase。


请建议一种方法来获取data.service.entities.TestCase@1a1da881的实例,以便调用其方法。


白衣染霜花
浏览 136回答 1
1回答

神不在的星期二

为了获取实例,我创建了 TestNg CustomListener 类,在其中我手动将输入参数 (TestCase) 设置为每个已执行测试 ITestResult 的属性:&nbsp; &nbsp; public class CustomListener extends TestListenerAdapter {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onTestFailure(ITestResult iTestResult) {&nbsp; &nbsp; &nbsp; &nbsp; super.onTestFailure(iTestResult);&nbsp; &nbsp; &nbsp; &nbsp; TestCase tCase = (TestCase) iTestResult.getParameters()[0];&nbsp; &nbsp; &nbsp; &nbsp; iTestResult.setAttribute("failed_case", tCase);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onTestSuccess(ITestResult iTestResult) {&nbsp; &nbsp; &nbsp; &nbsp; super.onTestSuccess(iTestResult);&nbsp; &nbsp; &nbsp; &nbsp; TestCase tCase = (TestCase) iTestResult.getParameters()[0];&nbsp; &nbsp; &nbsp; &nbsp; iTestResult.setAttribute("passed_case", tCase);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onTestSkipped(ITestResult iTestResult) {&nbsp; &nbsp; &nbsp; &nbsp; super.onTestSkipped(iTestResult);&nbsp; &nbsp; &nbsp; &nbsp; TestCase tCase = (TestCase) iTestResult.getParameters()[0];&nbsp; &nbsp; &nbsp; &nbsp; iTestResult.setAttribute("skipped_case", tCase);&nbsp; &nbsp; }&nbsp; }在我的自定义报告类中,我获取每个测试用例的对象,如下所示:&nbsp; &nbsp; &nbsp; &nbsp; TestCase failedCase = (TestCase) testResult.getAttribute("failed_case");&nbsp; &nbsp; &nbsp; &nbsp; TestCase passedCase = (TestCase) testResult.getAttribute("passed_case");&nbsp; &nbsp; &nbsp; &nbsp; TestCase skippedCase = (TestCase) testResult.getAttribute("skipped_case");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java