WireMock未按正文包含映射请求

时间:2018-08-10 16:13:48

标签: wiremock

我的http请求发送到此:create table tbl(ID int, `Time` time, Task varchar(10)); insert into tbl values (1, '12:00:00', 'task1'), (2, '12:13:00', 'task2'), (3, '10:16:00', 'task0'); select @t := cast(null as time); select id, task, start, end from ( select id, @t `end`, @t := `time`, `time` `start`, task from tbl order by `time` desc ) a;

我的带有身体的http请求:

{

https://myhost.com/ap

我想通过WireMock映射此请求。

这里是WireMock的映射文件。

  "Body": {
    "CommandName": "GetApplicationProfile"
  },
  "Header": {
    "Command": "GetApplicationProfile",
  }
}

我这样启动wireMock:

    {
  "request": {
    "url": "/my_host/ap",
    "bodyPatterns": [
      {
        "contains": "GetApplicationProfile"
      }
    ]
  },
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "status": 200,
    "bodyFileName": "get_profile.json"
  }
}

但是,当请求启动时,WireMock不会映射该请求。没啥事儿。 为什么?

3 个答案:

答案 0 :(得分:0)

URL不应包含主机名。它应该只包含资源路径。

网址格式应以“ /”开头,例如/https://myhost.com/ap。 现在,如果您在localhost上尝试此操作,则URL应该为localhost:<port>/https://myhost.com/ap

文件应位于src/test/resources/__files 如果没有,将给出错误文件不存在。

答案 1 :(得分:0)

您遇到的问题是,url部分中不应包含主机名。不需要。您的示例消息可以发送,并且将使用以下规则进行匹配。

{
  "request": {
    "url": "/app",
    "bodyPatterns": [
      {
        "contains": "GetApplicationProfile"
      }
    ]
  },
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "status": 200,
    "body": "ddd"
  }
}

答案 2 :(得分:0)

我在这里看到2个问题:  1.您需要从映射文件中的网址中删除主机名。  2.您的请求是HTTPS,这意味着您需要使用https:--https-port 8080启动Wiremock端口,或者将请求更改为HTTP