是否可以在空手道中进行软断言

Rah*_*hul 1 karate

即使断言/匹配之一失败,是否可以继续执行测试步骤?

Ex:

Scenario: Testing
* def detail = {"a":{"data":[{"message":["push","dash"]},{"message":["data","Test"]}]}}
* match detail contains {"a":{"data":[{"message":["push","dash"]}]}}
* print detail
Run Code Online (Sandbox Code Playgroud)

这里匹配将会失败,但执行会在此时停止。有没有办法进行软断言以便执行下一步?

Pet*_*mas 5

2021 年编辑 - Joel Ramos在此处continueOnStepFailure贡献了引入旗帜的 PR ,并且在空手道 1.0 及以上版本中可用。您可以在这里找到更多详细信息:/sf/answers/4671334741/


如果您使用Scenario Outline每个“行”,即使其中一个失败,也会执行。

Scenario Outline: Testing
* def detail = { a: 1, b: 2, c: 3 }
* match detail contains <expected>

  Examples:
    | expected |
    | { a: 1 } |
    | { b: 2 } |
    | { c: 3 } | 
Run Code Online (Sandbox Code Playgroud)

请注意,“软断言”的概念是有争议的,有些人认为这是一种不好的做法:

a) https://softwareengineering.stackexchange.com/q/7823

b) https://martinfowler.com/articles/nonDeterminism.html

对于那些寻找显示 2 个 JSON 对象之间所有不匹配的方法的人,请参阅: https: //stackoverflow.com/a/61349887/143475

最后,由于有些人想在 JS 中执行“条件”匹配逻辑,请参阅此答案: https: //stackoverflow.com/a/50350442/143475