Karate 如何有条件地检查响应?

Karate 如何有条件地检查响应?,karate,Karate,我正在用空手道做数据驱动测试,遇到了一个阻塞问题。REST API响应体处于不同的结构和状态。例如,当状态为200时,响应主体是JSON数组。当状态为4**和5***时,响应主体为字符串或空白。我希望使用blow代码有条件地检查响应。但这似乎不起作用 "* eval if (verInfo.statusCode == 200) (match each response contains any verInfo.respBody) //verInfo.statusCode and ver

我正在用空手道做数据驱动测试,遇到了一个阻塞问题。REST API响应体处于不同的结构和状态。例如,当状态为200时,响应主体是JSON数组。当状态为4**和5***时,响应主体为字符串或空白。我希望使用blow代码有条件地检查响应。但这似乎不起作用

    "* eval if (verInfo.statusCode == 200) (match each response contains any verInfo.respBody)  //verInfo.statusCode and verInfo.respBody is from the test data(DDT)
    * eval if (verInfo.statusCode != 200) match response contains verInfo.respBody"

首先,您不能像这样混合使用空手道脚本和JavaScript

其次,我建议您使用内置变量。我还建议使用适当的数据驱动方法,而不是用条件逻辑过度设计测试

因此,您可以这样做(如果您阅读文档和示例,还有许多其他方法):

场景大纲:
给定url'http://foo.bar'
请求
当方法发布时
然后匹配responseStatus==

和匹配响应==
示例:
|请求|代码|正文|
|“a”200“foo”|
|“b”| 400 |”|
Scenario Outline:
  Given url 'http://foo.bar'
  And request <req>
  When method post
  Then match responseStatus == <code>
  And match response == <body>


Examples:
    | req | code | body  |
    | 'a' | 200  | 'foo' |
    | 'b' | 400  | ''    |