java - 在使用 TestNg ITestResult 接口或任何其他 testNg 接口执行测试后,如何调用 TestNg @Test 方法的输入参数的实例
问题描述
我创建了一个实现 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 实例的方法,以便调用其方法。
解决方案
为了获取实例,我创建了 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");
推荐阅读
- c# - 在 asp.net MVC 中处理 localhost 时,smpt 未在已发布时发送电子邮件
- wcf - SOAP Onvif 对 WCF 客户端没有响应
- swift - 展开“字符串?” 快速变量?
- php - 来自五个 Mysql 表的每个国家、州、城市和地区的销售额总和
- ios - 如何以编程方式创建带有动态选项卡的选项卡栏?底部黑屏问题
- android - 电报发送未保存的联系人
- java - 无限递归嵌套对象
- android - 在设备中运行时应用程序在启动时崩溃
- php - 用于检查电子邮件的 Paypal API 是否已注册?帮助设置提前权限
- javascript - 如何在 razzle 中运行自定义脚本?