在每个失败的步骤下,如何将我放入测试脚本的软断言报告到ExtentReports报告中?

时间:2018-04-19 23:46:48

标签: selenium-webdriver testng assert extentreports selenium-extent-report

我正在使用一个使用Selenium,TestNG,Java和ExtentReports进行报告的测试框架。

我有一个测试脚本,分为几个步骤,在每个步骤结束时,我都有硬断言来验证我正在与之交互的元素的存在。

我想使用一些软断言以便我的后续步骤能够继续执行,但我还想在ExtentReport报告中看到每个步骤的一些失败指示,而不仅仅是在步骤时脚本失败。

例如,我想在报告中看到类似:step1 - 通过; step2 - 失败(并记录错误原因的执行),step3 - 传递等

目前,如果我为上面示例中的步骤2中找不到的元素添加软断言,则该步骤被标记为已通过,我希望将其标记为失败,但也继续第3,4步等。

有谁知道我该怎么做,或提供一些文件?任何帮助将不胜感激。

1 个答案:

答案 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");

获取如下报告 - enter image description here

更新 将此方法添加到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");
    }
}