【问题标题】:How to do softassertion with karate? [duplicate]如何用空手道做软断言? [复制]
【发布时间】:2021-03-21 06:16:35
【问题描述】:

我有一个功能使用其他两个类似的功能:

When call read(ser.getCarList) headers
When call read(ser.getTaxes) headers

所以第一个特征 getCarList 有两个验证

When method Get
 * configure continueOnStepFailure = true
Then status 200
And match response = read ('this:getCarAssertion')
 * configure continueOnStepFailure = true

我已经尝试使用 new 关键字,但是当我得到状态代码 200 但响应错误时,下一个功能 getTaxes 不会继续执行

【问题讨论】:

  • 这有点实验性。我会请知道这件事的人在这里发表评论。同时我的建议是您不应该将其视为blocker 并在评估和测试套件方面取得进展。如果这很紧急,请按照以下流程进行操作:github.com/intuit/karate/wiki/How-to-Submit-an-Issue

标签: karate


【解决方案1】:

continueOnStepFailure 是一个新关键字,旨在验证结果时使用,而不是在第一次失败时立即失败。目的是用于断言或验证,以便在断言测试结果时可以验证尽可能多的信息。

为避免在多个步骤中将其用作纯 if 条件(会产生意想不到的后果),* continueOnStepFailure = true 的默认行为仅在 match 步骤中发生失败时才会继续执行,并且一旦您禁用带有* continueOnStepFailure = false 的机制测试将失败(但仍提供continueOnStepFailure 块中每个步骤的详细信息)。这是因为match 是任何类型验证的推荐关键字,也是您可以利用强大的 JSON 断言库等的方法。

还建议在 match 关键字集之后显式设置 * continueOnStepFailure = false,以便在有意识地决定在失败后继续评估关键字之后不会出现意外行为。

话虽如此,有一些方法可以扩展和配置continueOnStepFailure 的行为超出默认行为。该关键字还采用 JSON 输入,而不是布尔值,这允许更多的可扩展性。例如。关键字的默认行为可以表示如下:

* configure continueOnStepFailure = { enabled: true, continueAfter: false, keywords: ['match'] }

这意味着continueOnStepFailure 机制将被启用,在该机制被禁用后场景执行将继续,并且它只接受发生在match 关键字。请注意,如果您将 continueAfter 设置为 true,则场景将继续执行剩余的步骤,但场景本身仍将被标记为失败(报告中有适当的输出以及该场景的任何调用者的典型失败行为)。我强烈建议不要将 continueAfter 设置为 true。

对于您的特定用例,status 关键字绝对在我所描述的断言范围内。 status 200 只是match responseStatus == 200 的快捷方式。鉴于它是一个匹配断言,我们很可能应该将状态添加到默认行为中。使用 JSON 中的扩展配置,您可以为您的用例执行以下操作:

When method Get
And configure continueOnStepFailure = { enabled: true, continueAfter: false, keywords: ['match', 'status'] }
Then status 200
And match response = read ('this:getCarAssertion')
And configure continueOnStepFailure = false

可以在单元测试in this pull request 中找到一些其他示例。为了快速参考,您的空手道测试报告如下所示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多