You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SerenityBDD+Java环境下如何实现检查点失败时标记步骤失败但程序继续运行

SerenityBDD+Java 软断言不中断执行实现方案

方案1:使用Serenity原生软断言(适配性最优)

Serenity框架本身内置了和步骤生命周期绑定的软断言能力,适配性优于第三方软断言库,不用额外引入依赖:

  • 直接实例化SerenitySoftAssertions对象用于所有检查点断言,示例代码如下:
import net.serenitybdd.assertions.SerenitySoftAssertions;
import net.thucydides.core.annotations.Step;

public class UserTestSteps {
    private final SerenitySoftAssertions softly = new SerenitySoftAssertions();

    @Step("校验用户名")
    public void checkUsername(String actual, String expected) {
        softly.assertThat(actual).as("用户名校验").isEqualTo(expected);
    }

    @Step("校验用户年龄")
    public void checkUserAge(Integer actual, Integer expected) {
        softly.assertThat(actual).as("年龄校验").isEqualTo(expected);
    }

    // 统一在测试用例执行完成后调用一次assertAll
    public void assertAllChecks() {
        softly.assertAll();
    }
}
  • 断言失败时不会抛出中断异常,Serenity会自动标记对应@Step注解标注的步骤为失败状态,所有步骤执行完成后统一汇总所有失败信息输出到报告。

方案2:兼容已引入的第三方软断言库

如果已经使用了AssertJ SoftAssertions、TestNG SoftAssert等第三方软断言库,可以通过适配Serenity步骤状态管理实现需求:

  • 核心逻辑:捕获软断言抛出的错误信息,主动上报给Serenity当前步骤,不向上抛出异常中断执行,示例代码如下:
import net.serenitybdd.core.Serenity;
import org.testng.asserts.SoftAssert;

@Step("校验用户手机号")
public void checkPhone(String actual, String expected) {
    // 以TestNG SoftAssert为例
    SoftAssert softAssert = new SoftAssert();
    try {
        softAssert.assertEquals(actual, expected, "手机号校验失败");
        softAssert.assertAll();
    } catch (AssertionError e) {
        // 主动标记当前步骤为失败,保留错误栈信息
        Serenity.getCurrentStep().setFailed(e);
        // 不抛出异常,后续步骤正常执行
    }
}
  • 不要在步骤内部把断言异常往外抛,否则依然会触发Serenity的执行中断逻辑。

方案3:全局配置开启默认软断言

如果需要全量测试用例都走软断言不中断逻辑,可以直接修改全局配置,无需修改业务测试代码:

  • 在项目的serenity.properties配置文件中添加配置项:serenity.assertions.soft=true
  • 开启后所有Serenity原生断言默认采用软断言模式,所有检查点失败信息会统一收集,到测试用例执行结束后才汇总抛出,每个失败的检查点会自动关联到对应步骤标记为失败状态。

调试优化建议

  • 所有断言建议通过as()方法添加自定义检查点描述,Serenity报告中会精准展示每个失败检查点的描述、实际值和预期值,不用逐行排查代码
  • 如果个别步骤需要失败后直接中断执行,手动抛出AssertionError即可触发硬中断逻辑

内容的提问来源于stack exchange,提问作者LDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:15:03