0

响应数据包含类似这样的内容。“INBOUND_MESSAGE:

HTTP/1.1 200 Content-Type:application/json Transfer-Encoding:chunked Date:Fri, 22 Sep 2017 12:18:50 GMT

{"errors":{"deviceId":{"message":"路径deviceId是必需的。","name":"ValidatorError","properties":{"type":"required","message":"路径{PATH}是必需。","path":"deviceId","value":""},"kind":"required","path":"deviceId","value":"","$isValidatorError":true} ,"name":{"message":"路径name是必需的。","name":"ValidatorError","properties":{"type":"required","message":"路径{PATH}是必需的。"," path":"name","value":""},"kind":"required","path":"name","value":"","$isValidatorError":true}},"_message":"devices validation failed","message":"devices validation failed: deviceId: Path deviceIdis required., name : 路径name是必需的。","name":"ValidationError"}

"

我需要查看是否可以针对 $.Message 进行验证,并且条件必须是“需要 deviceId”。我使用了下面的代码,但是测试用例失败了,因为 $.Message 上有多个消息可用

            http()
                .client(IotDevice)
                .receive()
                .response(HttpStatus.OK)
                .validate("$.message", "Path `deviceId` is required.");

有没有办法在响应消息中搜索预期的字符串。

问候 BJ

4

1 回答 1

2

关于 JSONPath 的说明

通过使用 JSONPath 表达式$.message,您不会选择多个message条目,而是选择根下的条目(您可以使用$..message, 和两个点来选择所有条目)。

如果以格式化的方式查看您的 JSON 数据,您可以立即看到最顶部message条目的值,devices validation failed: deviceId: Path deviceId is required., name: Path name is required.它似乎是该errors部分中所有消息的串联。

解决方案

因此,如果您的目标是验证字符串Path deviceId is required是否是最顶层message条目的一部分,则可以将以下 Citrus 匹配器与 JSONPath 表达式结合使用(另请参阅有关JSONPath验证匹配器的 Citrus 文档):

<message type="json">
  <validate>
    <json-path expression="$.message" value="@contains('Path deviceId is required')@"/>
  </validate>
</message>

格式化的 JSON

{
  "errors": {
    "deviceId": {
      "message": "Path deviceId is required.",
      "name": "ValidatorError",
      "properties": {
        "type": "required",
        "message": "Path {PATH} is required.",
        "path": "deviceId",
        "value": ""
      },
      "kind": "required",
      "path": "deviceId",
      "value": "",
      "$isValidatorError": true
    },
    "name": {
      "message": "Path name is required.",
      "name": "ValidatorError",
      "properties": {
        "type": "required",
        "message": "Path {PATH} is required.",
        "path": "name",
        "value": ""
      },
      "kind": "required",
      "path": "name",
      "value": "",
      "$isValidatorError": true
    }
  },
  "_message": "devices validation failed",
  "message": "devices validation failed: deviceId: Path deviceId is required., name: Path name is required.",
  "name": "ValidationError"
}
于 2017-09-22T13:31:43.557 回答