WireMock模拟接口响应规则实战
模拟接口响应规则实战
模拟一个接口,总的来说就是配置 mapping 文件,mapping 文件中又分为 Request 的配置和 Response 的配置。
Request配置
method:配置接口的请求方法
- 通常接口的请求方式,如GET、POST、PUT、DETELE等
urlpath:配置接口的路径参数
- urlPattern 路径中无查询参数的接口
- urlPathPattern 路径中有查询参数的接口
QueryParameters :配置接口的查询参数只能是固定的名称
BodyPatterns:配置请求主体配置设置格式,例如:JSON格式、XML格式等
basicAuth:配置基础认证规则
Response配置
- body:配置接口响应规则返回体
- body:返回体为字符串
- jsonBody:返回体为json串
- bodyFileName:返回体为json文件,该文件存储于
__files
目录下
模拟响应规则接口定义
需求:对于书籍信息通过接口进行操作,提前需要进行认证
按照RESTful的思想设计一组对书籍信息操作的RESTful API:
请求方式 | 地址 | 说明 |
---|---|---|
GET | /api/books | 获取所有的书籍信息 |
GET | /api/book/id | 根据id获取书籍信息,id只有1~4 |
POST | /api/book | 创建一个书籍信息 |
PUT | /api/book | 修改书籍信息 |
PATCH | /api/book/message | 修改书籍的message字段 |
DELETE | /api/book/id | 根据id删除书籍信息 |
请求主体:
1 | { |
返回响应主体
1 | { |
接口响应规则的配置
- 获取所有的书籍信息
- 根据id获取书籍信息
- 创建一个书籍信息
- 修改书籍信息
- 修改书籍的message字段
- 根据id删除书籍信息
对应生成的响应规则的文件和响应体的文件放入到__files
和mappings
文件夹中,启动standalone服务后,可用Postman工具请求,查看。
总结
- 如果模拟的接口无查询参数,那么使用 urlPattern 即可。
- 如果模拟的接口有查询参数,但对查询参数的名字和个数无任何限制,那么使用urlPathPattern即可。
- 如果模拟的接口有查询参数,且对查询参数的名称和值都有限制,那么需要在mapping文件中添加queryParameters进行控制。
模拟XML响应规则接口定义
以上是JSON响应规则的接口定义,如果是XML的呢?与json区别的地方是 BodyPatterns的配置,XML格式的接口在mapping文件中配置bodyPatterns时有两种方式:
第一种是使用equalToxml方式
假如我们需要Mock一个Post请求接口,接口的Body体如下,且Body中每个字段以及字段的值都是固定的。
1
2
3
4<person>
<firstName>Done</firstName>
<lastName>Jone</lastName>
</person>针对这样的接口我们可以采用equalToxml的方式,mapping文件内容如下,可以看到和Mock JSON格式的接口相比,只是把header中Content-Type定义为application/xml,BodyPattern中使用equalToXml方式定义 Request Body内容。
响应规则如下定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21{
"request": {
"method": "POST",
"urlPathPattern": "/api/user/xml/([a-z]*)",
"headers": {
"Content-Type": {
"equalTo": "application/xml"
}
},
"bodyPatterns": [{
"equalToXml": "<person><firstName>Done</firstName><lastName>Jone</lastName></person>"
}]
},
"response": {
"status": 200,
"body": "<code>0</code><message>add person with equalToXml successfully</message>",
"headers": {
"Content-Type": "application/xml"
}
}
}
第二种是使用matchesXmlPath方式
例如如下接口,我们只想控制 Request Body中price字段的值包含数字1,Body体内容如下
1
2
3
4<book>
<bookName>test</bookName>
<price>12</price>
</book>对于这样的接口使用matchesXmlPath配置,响应规则如下定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{
"request": {
"method": "POST",
"urlPathPattern": "/api/user/add",
"headers": {
"Content-Type": {
"equalTo": "application/xml"
}
},
"bodyPatterns": [
{
"matchesXPath": {
"expression": "//price/text()",
"contains": "1"
}
}
]
},
"response": {
"status": 200,
"body": "add user with xpath bodyPatterns successfully"
}
}
总结
- 如果对接口的Body体内容有严格要求(字段名称,字段值都有限制)那么可以采用equalToXml方式定义Request Body 。
- 如果只对接口Body体局部字段值有控制,那么可以采用matchesXpath的方式进行定义。
- 如果对Request Body无任何要求,那么不配置bodyPatterns,只需把Header 中content-Type设置为application/xml即可。