0

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

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

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

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

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

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

4

1 回答 1

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");
    }
}
于 2018-04-20T06:54:56.890 回答