【问题标题】:Continue execution even if one step fails in cucumber黄瓜即使一步失败也继续执行
【发布时间】:2020-11-17 04:41:25
【问题描述】:

我想继续执行我的场景,即使在黄瓜报告中有些失败,它应该将其显示为失败但不应该停止执行。

我尝试使用软断言类并使用它

 SoftAssertion sa = new SoftAssertion();
if (response.getStatusCode() == 200) {
                Sytem.out.println("pAASED")
            } else {
                sa.fail("this is the failure");
            }

但假设我有两个场景,第一个场景的响应不是 200,否则它将阻塞并导致场景失败

java.lang.AssertionError: this is the failure
    at org.junit.Assert.fail(Assert.java:88)

它甚至不适合第二种情况。有人可以帮助我如何实现预期的结果(即它应该继续执行而不管一个失败)

【问题讨论】:

    标签: java cucumber assertion


    【解决方案1】:

    这里有两个不同的东西。

    1. 错误代码作为响应
    2. 异常

    根据Oracle website 的异常定义:

    异常是一个事件,它发生在一个事件的执行过程中 程序,这会破坏程序指令的正常流程。

    这样,异常与正常的执行流程完全不同。所以如果你想在异常情况下继续,你需要使用concept of exception handling。如下:

    try {
        response = yourMethodCall();
    } catch (Exception e) {
        log.error(e)
    }
    

    在上面的示例代码中:

    1. yourMethodCall() 替换为实际的方法调用。
    2. 捕获适当的最小异常。 (在你的情况下应该是AssertionError
    3. 考虑记录您的异常以便更好地调试,就像在代码中一样。为此创建日志对象。

    【讨论】:

    • @notescew 感谢您提供详细的解决方案。但是使用 try catch 块它只是简单地捕获异常而不是失败。在报告中我认为它通过了~~~ try { if (response.getStatusCode() == 200) { try { JSONObject jsonObj = new JSONObject(response.asString()); name = jsonObj.getString("name"); } 捕捉(异常 e){ e.getMessage(); } } } 捕捉(AssertionError e){ e.getMessage(); ~~~我使用了这段代码,但即使有一个问题也显示通过了。我希望它应该继续执行,但在报告中应该显示失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多