我正在使用一个使用Selenium,TestNG,Java和ExtentReports进行报告的测试框架。
我有一个测试脚本,分为几个步骤,在每个步骤结束时,我都有硬断言来验证我正在与之交互的元素的存在。
我想使用一些软断言以便我的后续步骤能够继续执行,但我还想在ExtentReport报告中看到每个步骤的一些失败指示,而不仅仅是在步骤时脚本失败。
例如,我想在报告中看到类似:step1 - 通过; step2 - 失败(并记录错误原因的执行),step3 - 传递等
目前,如果我为上面示例中的步骤2中找不到的元素添加软断言,则该步骤被标记为已通过,我希望将其标记为失败,但也继续第3,4步等。
有谁知道我该怎么做,或提供一些文件?任何帮助将不胜感激。
答案 0 :(得分:1)
假设这些步骤是一种长测试方法的一部分。尝试使用子节点的概念。当断言失败时,您可以将其状态设置为失败或错误等。问题是你需要在try-catch块中有一个硬断言来捕获AssertionError
然后设置状态。
ExtentTest test = extent.startTest("Hello","Yeah");
extent.loadConfig(ExtentReports.class, "extent-config.xml");
test.log(LogStatus.PASS, "Before Step details");
ExtentTest child1 = extent.startTest("Child 1");
try{
//Assertion to be placed here
child1.log(LogStatus.PASS, "Pass");
} catch(AssertionError e) {
child1.log(LogStatus.FAIL, "Fail");
}
//Add to soft assertion
ExtentTest child2 = extent.startTest("Child 2");
try{
//Assertion to be placed here
child2.log(LogStatus.PASS, "Pass");
} catch(AssertionError e) {
child2.log(LogStatus.FAIL, "Fail");
}
//Add to soft assertion
test.appendChild(child1).appendChild(child2);
test.log(LogStatus.PASS, "After Step details");
更新
将此方法添加到ExtentTestManager
类,并从testng测试中调用静态方法。虽然可以使用ThreadLocal
- http://extentreports.com/docs/versions/3/java/#testng-examples
public static synchronized void updateStepResult(String childNodeDesc, Object actual, Object expected) {
ExtentTest test = extentTestMap.get((int) (long) (Thread.currentThread().getId()));
ExtentTest cn = test.appendChild(extent.startTest(childNodeDesc));
try {
assertEquals(actual, expected);
cn.log(LogStatus.PASS, "Pass");
} catch (AssertionError e) {
cn.log(LogStatus.FAIL, "Fail");
}
}