如何在Karate框架中检查数组的长度?

San*_*gde 3 karate

我从 REST Api 有 2 个不同的响应,如下所示

1. {"type":null,"title":"Request is invalid","status":"BAD_REQUEST","detail":"Please correct request and try again.","invalidParams":[{"name":"create.arg0.name","reason":"Name is required"}]}

2. {"type":null,"title":"Unicode char u0000 is not allowed","status":"BAD_REQUEST","detail":"Unicode char u0000 is not allowed"}
Run Code Online (Sandbox Code Playgroud)

我想写一个条件,如果invalidParams存在于响应中,然后比较数组的内容。如果不是,invalidParams应该为空/未定义。

 Scenario Outline: Create Asset Model with missing name and status
    Given url modelsUrl
    And request somedata
    When method POST
    Then status 400
    Then assert response.type == null
    Then match response.status == 'BAD_REQUEST'
    Then match (response.invalidParams != undefined && response.invalidParams[0].reason contains <reason>) OR (response.invalidParams == undefined)
Run Code Online (Sandbox Code Playgroud)

但与 null/undefied 和 length 进行比较也不起作用。空手道中如何处理这种情况?正常的 JavaScript 无法工作。

小智 7

根据 riiich 共享的链接,建议的方法是对数组长度 = 2 执行以下操作

  * match response == '#[2]'
Run Code Online (Sandbox Code Playgroud)


rii*_*ich 6

要检查成员是否存在或检查数组的长度,您应该使用assert,而不是match。我还建议将您的最后一个声明分成多个断言以提高透明度。

以下是一些使用名为“arr”的数组进行响应的示例:

检查数组长度

...
And assert response.arr.length == 1
...
Run Code Online (Sandbox Code Playgroud)

检查数组是否存在

...
And assert response.arr != null
...
Run Code Online (Sandbox Code Playgroud)

检查数组不存在

...
And assert response.arr == null
...
Run Code Online (Sandbox Code Playgroud)

参考: https: //intuit.github.io/karate/#payload-assertions