如何用空手道做软断言?
How to do softassertion with karate?
我有一个功能使用其他两个类似的功能:
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 不会继续执行
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。为了快速参考,您的空手道测试报告将如下所示:
我有一个功能使用其他两个类似的功能:
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 不会继续执行
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。为了快速参考,您的空手道测试报告将如下所示: