我创建了一个实现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实例的方法 以便调用其方法。
答案 0 :(得分:0)
为了获取实例,我创建了TestNg CustomListener类,在其中我手动将输入参数(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);
}
}
在我的自定义报告类中,我得到每个测试用例的对象,如下所示:
TestCase failedCase = (TestCase) testResult.getAttribute("failed_case");
TestCase passedCase = (TestCase) testResult.getAttribute("passed_case");
TestCase skippedCase = (TestCase) testResult.getAttribute("skipped_case");