验证响应正文中是否有特定字符串

时间:2017-09-22 12:41:37

标签: citrus-framework

响应数据包含类似的内容。 " INBOUND_MESSAGE:

HTTP / 1.1 200 内容类型:应用程序/ JSON 传输编码:分块 日期:2017年9月22日星期五12:18:50 GMT

{"错误":{" deviceId":{"消息":"路径THEOBJECT = { init: function() { this.tools.init(); } }; THEOBJECT.tools = { active: false, init: function() { // active variable updated elsewhere/loading if (!this.active) { THEOBJECT.utils.timeout('tools.init', 100); } // is active so continue } }; THEOBJECT.utils = { timeout: function(functionName, time) { setTimeout(function() { functionName.split('.').reduce((acc,curr) => acc[curr],THEOBJECT)(); }, time); } }; THEOBJECT.init();是必需的。" "名称":" ValidatorError""属性" {"类型":"需"&#34 ;消息":"路径deviceId是必需的。","路径":" deviceId","值" :""}"种类":"需""路径":" DEVICEID"&#34 ;值":""" $ isValidatorError":真}"名称" {"消息":&#34 ;路径{PATH}是必需的。"," name":" ValidatorError"," properties":{" type&#34 ;:"必需","消息":"路径name是必需的。","路径":&#34 ;名称""值":""}"种类":"需""路径&#34 ;:"名称""价值":""" $ isValidatorError":真正}}" _message&#34 ;:"设备验证失败","消息":"设备验证失败:deviceId:路径{PATH}是必需的。,名称:路径deviceId是需要的编""名称":" ValidationError"}

"

我需要查看我是否可以验证$ .Message和条件必须是" deviceId`是必需的"。我使用下面的代码但是测试用例失败,因为$ .Message上有多个消息可用

name

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

此致 BJ

1 个答案:

答案 0 :(得分:2)

关于JSONPath的澄清

通过使用JSONPath表达式$.message,您选择多个message条目,但正好是根目录下的条目(您可以选择全部使用$..message,有两个点。)

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

解决方案

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

<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"
}