java - 如何在测试结果列 Extent HTML 报告中将 TestNg“dependsOnMethods”显示为单独的节点
问题描述
如何在测试结果列 Extent HTML 报告中将 TestNg“dependsOnMethods”显示为单独的节点”
我正在 Maven 项目中运行 TestNg、java、extent 报告 3.1.2、selenium 测试。我有一个 test-TEST1,它在内部调用 TEST2(使用 TestNg-dependendsOnMethods)。运行后,当我检查范围报告时,它将 TEST1 和 TEST2 的结果分别显示为 2 个测试而不是 1 个测试 ieTEST1 和 2 个子测试,即 TEST1 &测试2。这是当前情况的链接:https ://imgur.com/ZnBNqzo
我希望 Extent HTML 报告仅显示 TEST1(在 TESTS 列中),当我单击 TEST1 时,报告应在测试步骤结果列中显示 TEST1 和 TEST2 的状态和屏幕截图(它位于右侧当单击相应的测试时)。这是 ToBe 情况的链接:https ://imgur.com/NKMxoIB
//测试1
@Test(dependsOnMethods = { "TEST2" })
public void TEST1 () throws InterruptedException {
// selenium test java code
}
//测试2
@Test()
public void TEST2 () throws InterruptedException {
// selenium test java code
}
//范围报告
public void onTestSuccess(ITestResult tr) {
logger = extent.createTest(tr.getName());
logger.log(Status.PASS, MarkupHelper.createLabel(tr.getName(),
ExtentColor.GREEN));
System.out.println("TEST PASSED- Screenshot taken");
try {
captureScreen(tr.getName());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String screenshotPath = ".//"+tr.getName()+".png";
try {
logger.pass("Screenshot is below:" +
logger.addScreenCaptureFromPath(screenshotPath));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
解决方案
最后,通过实现 ITestListener 解决了我的问题。
public static ArrayList<String> methodList = new ArrayList<String>();
@Override
public void onTestStart(ITestResult result) {
if ((chkAndAddArray(finalInstance))) {
return;
}
if (finalmethodname.equalsIgnoreCase(finalInstance.toString())) {
parentTest= extent.createTest(finalmethodname);
} else {
parentTest= extent.createTest(finalInstance);
}
}
boolean chkAndAddArray(String instance) {
if (methodList.contains(instance)) {
System.out.println(instance + " value is already present");
return true;
} else
methodList.add(instance);
System.out.println(instance + " value is not present & now, added");
return false;
}
public void onTestSuccess(ITestResult tr) {
System.out.println("onTestSuccess");
childTest = parentTest.createNode(tr.getName());
childTest.log(Status.PASS, MarkupHelper.createLabel(tr.getName(),
xtentColor.GREEN));
e1.printStackTrace();
}
childTest.pass("Screenshot is below:",
MediaEntityBuilder.createScreenCaptureFromPath(screenshotPath).build());
} catch (IOException e1) {
e1.printStackTrace();
}
}
**对 onTestFailure、onTestSkipped 做了同样的事情。
推荐阅读
- node.js - 将 node.js 模块动态加载到作为 Lambda 函数运行的另一个 node.js 模块中
- codeigniter - Codeigniter 4 - 在 routes.php 中重定向
- apache-kafka - 在pyflink中访问kafka时间戳
- python - 需要帮助在 python 中为每项投资在不同日期计算不同投资的 IRR
- node.js - 使用节点 JS 发出 Firebase 云函数调用第三方 API
- c++ - C++;While循环无法退出;哨兵似乎没有被认出来。带有 Switch 语句的嵌套循环
- python - 如何在 Pyspark 中填写空值
- python - 无法理解奇怪的 Python lambda 函数
- python - 如何避免重复 Python 子类的文档字符串和参数?
- python - wxPython - 为当前作为 CLI 版本工作的应用程序创建 GUI - 不知道从哪里开始