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 中找到一些其他示例。为了快速参考,您的空手道测试报告如下所示: