首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wiremock BodyPattern匹配包含这个或那个

Wiremock BodyPattern匹配包含这个或那个
EN

Stack Overflow用户
提问于 2020-05-15 17:17:10
回答 2查看 2.1K关注 0票数 0

我正在尝试配置Wiremock,如果请求主体包含这个或那个等内容,则从文本文件返回相同的响应。以下是我针对单个请求的工作文件:

代码语言:javascript
复制
{
  "priority": 1,
  "request": {
    "method": "POST",
    "urlPath": "/v1/retrieve-vehicle",
    "bodyPatterns" : [ {
      "contains" : "\"vehicleIdentifier\":\"EROR-103\""
    } ]
  },
  "response": {
    "status": 404,
    "bodyFileName": "JsonFiles/NoVinFound-Error103.json",
    "headers": {
      "Content-Type": "application/json;charset=UTF-8"
    }
  }
}

我尝试了几种bodyPatterns属性的组合(受文档启发),但都无济于事。

代码语言:javascript
复制
"bodyPatterns" : [ {
      "contains" : "\"vehicleIdentifier\":\"EROR-103\"",
      "contains" : "\"vehicleIdentifier\":\"EROR-103A\""
    } ]
代码语言:javascript
复制
"bodyPatterns" : [ {
      "contains" : "\"vehicleIdentifier\":\"EROR-103\""
      }, {
      "contains" : "\"vehicleIdentifier\":\"EROR-103A\""
    } ]
代码语言:javascript
复制
"multipartPatterns" : [ {
      "matchingType" : "ANY",
      "bodyPatterns" : [ {
        "contains" : "\"vehicleIdentifier\":\"EROR-103\"",
        "contains" : "\"vehicleIdentifier\":\"EROR-103A\""
      } ]
    } ]
代码语言:javascript
复制
"multipartPatterns" : [ {
      "matchingType" : "ANY",
      "bodyPatterns" : [ {
        "contains" : "\"vehicleIdentifier\":\"EROR-103\"" 
        }, {
        "contains" : "\"vehicleIdentifier\":\"EROR-103A\""
      } ]
    } ]

请告诉我哪里做错了。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-19 23:49:51

我的一个同事找到了解决方案。我们需要一个“mappings tag”,然后列出完整的JSON对象,如下所示。

代码语言:javascript
复制
{
  "mappings": [
    {
      "priority": 1,
      "request": {
        "method": "POST",
        "urlPath": "/v1/retrieve-owner",
        "bodyPatterns" : [ {
          "matchesJsonPath": "$.[?($.vehicleIdentifier == 'VIN-A')]"

        } ]
      },
      "response": {
        "status": 200,
        "bodyFileName": "JsonFiles/Exported-Vehicle.json",
        "headers": {
          "Content-Type": "application/json;charset=UTF-8"
        }
      }
    },
    {
      "priority": 1,
      "request": {
        "method": "POST",
        "urlPath": "/v1/retrieve-owner",
        "bodyPatterns" : [ {
          "matchesJsonPath": "$.[?($.vehicleIdentifier == 'VIN-B')]"

        } ]
      },
      "response": {
        "status": 200,
        "bodyFileName": "JsonFiles/Exported-Vehicle.json",
        "headers": {
          "Content-Type": "application/json;charset=UTF-8"
        }
      }
    }
  ]
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-20 00:40:53

使用mappings文件是可行的,但有一些注意事项,总的来说,我建议使用一种不同的方法。

相反,您可以有一个基于正则表达式匹配的单一映射文件。

代码语言:javascript
复制
{
    "priority": 1,
    "request": {
        "method": "POST",
        "urlPath": "/v1/retrieve-owner",
        "bodyPatterns" : [ {
            "matches": ".*\"vehicleIdentifer\": \"VIN-(A|B)\".*"
        } ]
    },
    "response": {
        "status": 200,
        "bodyFileName": "JsonFiles/Exported-Vehicle.json",
        "headers": {
            "Content-Type": "application/json;charset=UTF-8"
        }
    }
}

您可能需要尝试让正则表达式正确匹配,但这应该是可行的,并允许您具有更大的灵活性。假设您必须添加另一个匹配,则只需编辑正则表达式,而不是向映射文件添加一个全新的映射。

我也没有那么多使用matchesJsonPath的经验,但您也可以利用它,并在那里的值上进行正则表达式匹配。

下面是我个人最喜欢的使用正则表达式的工具:Regex101

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61815835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档