- 能够mock HTTP或者HTTPS 的server或者服务
- 当一个请求匹配 expectation时能够返回一个mock response
- 当一个请求匹配 expectation时能够forward 一个请求
- 当一个请求匹配 expectation时能够执行一个回调 (callback),允许动态地创建response
- 支持Request验证
3)Moco
4)Mock.js
5)RAP
这些了解即可;
### **04、搭建Mock平台**
这里使用wiremock环境搭建Mock平台,具体方法如下:
WireMock 的独立安装版本其实就是一个Jar包,可以从Maven仓库中下载或者也可以在Java Maven项目中通过 pom.xml的依赖添加:
com.github.tomakehurst
wiremock-jre8-
standalone
2.26.3
test
```
除了Standalone 版本, 也可以直接在 Java代码中引用,对应Maven依赖:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8</artifactId>
<version>2.26.3</version>
<scope>test</scope>
</dependency>
WireMock 命令行用法
WireMock 的独立版本是一个 Jar 包,所以运行 Wiremock 自然是需要 Java 基础环境,命令如下:
java -jar wiremock-standalone-2.26.3.jar
命令行支持的一些主要参数及其作用说明如下:
- --port 设置 Mock 服务的 http 端口,默认启动在 8080 端口
- 如果设置为0,则自动确定端口
- --https-port 设置 https 的端口
- --verbose 在终端显示详细的日志信息
- --root-dir 设置 mappings 和 __files 目录的工作路径
- --enable-browser-proxying 以浏览器代理的方式运行
单来说,WireMoc 会在本地启动一个侦听指定端口的web服务,这里指定的端口可以用 --port 指定http协议 或 --httpsport指定https协议端口。启动后我们发到指定端口的请求,就会由WireMock来完成响应,达到接口Mock的目的,命令行启动后如图:
启动后,我们在本地运行目录下会看到 WireMock会自动生成__files 和 mappings两个目录。这两个目录中存放的就是Mock模拟的接口匹配内容了。
- __files 存放接口响应中会用到的一些文件资源
- mappings 存放接口响应匹配规则
具体的匹配方法我们后面再介绍,这里先介绍下WireMock本身自带的Admin接口。
Wiremock Admin 接口
WireMock 本身支持管理接口,启动后根据启动的端口,访问http://localhost:8080/\_\_admin/docs/ ,可以看到如下两个链接:
OpenAPI 3.0 spec
Swagger UI
可以用 Swagger UI接口定义格式查看支持的管理接口
http://localhost:8080/__admin/swagger-ui/
05WireMock基本用法
1)在mappings下创建一个*.json文件
{
"request": {
"method": "GET",
"url": "/api/mocktest"
},
"response": {
"status": 200,
"bodyFileName": "response.json",
"headers": {
"Content-Type": "application/json",
"Cache-Control": "max-age=86400"
}
}
}
bodyFileName还可以是html、xml等类型的文档。
2)在__files下创建响应文件
上例中response.json 就是需要我们在__files里面建立的响应文件。其内容为:
{
"test":"wiremock"
}
在浏览器或者使用curl命令,调用
http://localhost:8080/api/mocktest ,就能返回test.json的内容了。
当然,你也可以不用创建这个文件,直接在request中将
bodyFileName改成直接body写出这个json也可以:
{
"request": {
"method": "GET",
"url": "/api/mocktest"
},
"response": {
"status": 200,
"body": "{\"test\":\"wiremock\"}",
"headers": {
"Content-Type": "application/json",
"Cache-Control": "max-age=86400"
}
}
}
06Wiremock支持的HTTP方法
1)POST
http://localhost:8080/api/products
{"request": {
"method": "POST",
"url": "/api/products",
"bodyPatterns": [{
"equalToJson": "{ \"name\": \"new
product\", \"creator\": \"tester\", \"createTime\":
\"2015-09-07\" }",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
}]
},
"response": {
"status": 201,
"body": "Add successfully.",
"headers": {
"x-token":
"xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
bodyPatterns 请求正文的匹配模式,包括equalToJson 匹配JSON数据, ignoreArrayOrder 是否区分JSON数组元素顺序,ignoreExtraElements 是否忽略额外的元素
2)PUT
http://localhost:8080/api/products/1
{
"request": {
"method": "PUT",
"url": "/api/products/1",
"bodyPatterns": [{
"equalToJson": "{ \"id\": 1, \"name\":
\"new product\", \"creator\": \"tester\",
\"createTime\": \"2015-09-07\" }",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
}]
},
"response": {
"status": 200,
"body": "Update successfully.",
"headers": {
"x-token": "
xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
3) DELETE
http://localhost:8080/api/products/1
{
"request": {
"method": "DELETE",
"url": "/api/products/1"
},
"response": {
"status": 204,
"headers": {
"x-token": "
xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
4)URL Matching
http://localhost:8080/api/products/1(2/3…)
{
"request": {
"method": "GET",
"urlPattern": "/api/products/[0-9]+"
},
"response": {
"status": 200
}
}
5)Query参数匹配
http://localhost:8080/api/products?
search=china
{
"request": {
"method": "GET",
"urlPath": "/api/products",
"queryParameters": {
"search": {
"contains": "chin"
}
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": "{ \"id\": 7, \"name\": \"shan
zai\", \"from\":\"China\" },{ \"id\": 7, \"name\":
\"shan zai\", \"from\":\"China(RPC)\" }"
}
}
6)模拟错误
{
"request": {
"url": "/unknown.html",
"method": "GET"
},
"response": {
"status": 404,
"headers": {
"Content-Type": "text/html; charset=utf-
8"
}
}
}
7)设置响应延时
{
"request": {
"method": "GET",
"url": "/delayed"
},
"response": {
"status": 200,
"bodyFileName": "response.json",
"headers": {
"Content-Type": "application/json",
"Cache-Control": "max-age=86400"
},
"fixedDelayMilliseconds": 2000
}
}
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
了解详情》docs.qq.com/doc/DSlVlZExWQ0FRSE9H