首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WireMocks中的URL路径模式匹配(模式匹配)

WireMocks中的URL路径模式匹配(模式匹配)
EN

Stack Overflow用户
提问于 2017-07-09 16:11:20
回答 3查看 13.5K关注 0票数 2

我正在使用wiremock进行REST测试,并面临以下问题。我创建了以下2个json请求。

请求1:

代码语言:javascript
复制
{
  "request": {
    "method": "GET",
    "urlPattern": "/api/v1/user/2158634832/ishop.*",
    "headers": {
      "Accept": {
        "contains": "application/json"
      },
      "X-RequestId": {
        "matches": ".*"
      },
      "X-SecurityToken": {
        "matches": "valid_secure_token"
      }
    }
  },
  "response": {
    "status": 200,
    "jsonBody": {
      "user": {
        "ID": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
        "info": [
          {
            "kid": "2f0ad36a-9f23-427c-9a15-16d240385b87",
            "cid": 10962435,
            "pid": "V",
            "contactid": 11812026,
            "created": "2017-04-26T00:08:25.926",
            "lastModified": "2017-04-27T00:01:45.047",
          }
        ]
      }
    },
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

我对上述wiremock的Get请求如下所示

代码语言:javascript
复制
**/api/v1/user/2158634832/ishop?ID=9879cfde-e353-4722-a91e-f22d29d8195c**

请求2:

代码语言:javascript
复制
{
  "request": {
    "method": "GET",
    "urlPattern": "/api/v1/user/2158634832/ishop/status.*",
    "headers": {
      "Accept": {
        "contains": "application/json"
      },
      "X-RequestId": {
        "matches": ".*"
      },
      "X-SecurityToken": {
        "matches": "valid_secure_token"
      }
    }
  },
  "response": {
    "status": 200,
    "jsonBody": {
      "userstatus": {
        "id": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
        "type": "ishop",
        "status" : "active",
        "lastModifiedTime": "2017-04-27T00:01:45.047",
        "allowedChange": "true"
      }
    },
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

我对上述请求的请求如下所示

/api/v1/user/2158634832/ishop/status?ID=9879cfde-e353-4722-a91e-f22d29d8195c

这里的问题是,由于请求1和请求2的类似URL模式,有时发生的事情是

当我提交请求1的请求时,我得到的是请求2的答复。

有人能建议我怎么解决这个问题吗?我希望与matches和urlPattern有关,我可以在第一个请求中删除状态调用,但不确定如何做到。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-10 13:13:35

由于一个请求URL包含另一个请求URL,匹配较短URL的正则表达式也将匹配较长的URL。我怀疑这就是为什么你更喜欢更长的时候,更短的匹配。

我建议对你的URL匹配更具体一些。

第一个存根中的"urlPath": "/api/v1/user/2158634832/ishop"

"urlPath": "/api/v1/user/2158634832/ishop/status"在第二个

尽管您没有指定ID查询param,但它们仍然匹配。WireMock将没有匹配参数的额外头或查询参数视为“不关心,无论如何匹配”。

票数 3
EN

Stack Overflow用户

发布于 2017-07-12 17:16:52

嗯,我用以下的方式修复了它

请求1更改为

代码语言:javascript
复制
"urlPattern": "/api/v1/user/2158634832/ishop.*",

代码语言:javascript
复制
"urlPath": "/api/v1/user/2158634832/ishop",

请求2改为

代码语言:javascript
复制
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",

代码语言:javascript
复制
"urlPath": "/api/v1/user/2158634832/ishop/status",
票数 0
EN

Stack Overflow用户

发布于 2018-08-23 20:23:34

更好的解决方案是使用存根优先级:

http://wiremock.org/docs/stubbing/#stub-priority

这样您仍然可以使用urlPatten

代码语言:javascript
复制
{
    "priority" : 2,
    "request": {
        "method": "GET",
        "urlPattern": "/api/v1/user/2158634832/ishop.*",
        "headers": {
        ...

以及:

代码语言:javascript
复制
{
    "priority" : 1,
    "request": {
        "method": "GET",
        "urlPattern": "/api/v1/user/2158634832/ishop/status.*",
        "headers": {
        ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44998429

复制
相关文章

相似问题

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