背景
举个例子,比如我测试了某个需求,记录了一些mock数据。过了很长一段时间,我想要复现那个功能,用Charles一看一堆的记录,也不知道哪个是哪个。
但是whistle命令行的方式就很直观,易读性较好,通过注释的方式就可以启用和关闭
还有另外一个优势就是whistle可以不用安装证书抓需要证书验证的APP,但是这个需要运维同事支持了
安装启动
1、安装NOTE
2、安装Whistle
|
3、启动/关闭Whistle
启动Whistle(不指定端口默认是8899)
|
关闭Whistle
|
5、安装证书
参考官方文档
常用功能
1、树结构
2、设备隔离
运用场景:当需要多台手机数据相互隔离时
1、浏览器打开多个whistle的页面
2、分别在不同页面network->底部查询条件框->输入i:客户端ip,多个查询条件用空格相隔
|
3、模拟弱网
设置延迟请求/响应的时间(单位:毫秒),reqDelay、resDelay
|
设置请求/响应速度(单位:kb/s,千比特/每秒),reqSpeed、resSpeed
|
4、修改请求参数
替换/新增返回参数(reqMerge)
无论是get请求还是post请求,如果是表单类型的数据均可使用以下方式,其逻辑是存在参数即替换,不存在则新增字段
|
如内容类型为json
|
替换整个请求内容(reqBody)
只有post请求才存在替换Body的说法,这个方法目前试了只能通过读取values或者是本地文件的方式
|
字符串替换(reqReplace)
利用正则或字符串来匹配替换响应文本内容(响应的content-type必须文本类型:html、json、xml、text等)
举个例子,假设有{“code”:200,"message":"success"},使用reqMerge方法是resMerge://code=500,结果为{“code”:500,"message":"success"}。如果是使用reqReplace方法是resPlace://code=500,结果为{“500”:200,"message":"success"}
例子1:字符串匹配,多个值用&连接
|
例子2:正则匹配,多个值换行连接
|
5、修改返回参数
替换/新增返回参数(resMerge)
替换/新增响应类型为application/json或text/javascript的响应内容,其功能是通过resMerge://jsonData指定的JSON对象覆盖响应内容里面的JSON对象,其逻辑是存在参数即替换,不存在则新增字段
例子1:该方式可以直接修改json的属性,并且可以增加属性
|
例子2:但上述的方法有两个个问题,一个问题是数字也会变成字符串,另一个问题是json里边的多节点的参数不知道能不能定位到,因此可通过读取本地文件或者valuses的方式进行读取
|
替换整个响应内容(resBody)
这个方法目前试了只能通过读取values或者是本地文件的方式
|
字符串替换(resReplace)
利用正则或字符串来匹配替换响应文本内容(响应的content-type必须文本类型:html、json、xml、text等)。
举个例子,假设有{“code”:200,"message":"success"},使用resMerge方法是resMerge://code=500,结果为{“code”:500,"message":"success"}。如果是使用resReplace方法是resPlace://code=500,结果为{“500”:200,"message":"success"}
例子1:字符串匹配,多个值用&连接
|
例子2:正则匹配,多个值换行连接
|
6、接口测试
可以通过compose功能快速进行接口测试
network中选择接口->右键->点击Actions→点击compose->填写内容→点击发送
7、快速生成mock数据
8、模拟网络请求中断
3秒后中断请求
url enable://abort
resDelay:
//3000
9、修改接口状态码
如果接口还没开发完成,请求接口返回的状态码应为非200。这个时候即使你mock了数据,对应客户端也拿不到相关的数据。因此需要修改一下接口状态码的返回
* replaceStatus://200
10、模拟IP归属地
为了测试不同地域访问接口的场景
* reqHeaders://(X-Forwarded-For=14.23.53.59) #模拟广州ip
11、代理转发
当测试环境没有数据而想要获得真实的数据时,可以尝试通过访问测试环境地址时转发到线上环境地址解决。
url_A url_B
亦或者是可通过保持参数不变,仅修改域名的方式实现
www.qq.com/test host://ke.qq.com
常见问题查找:Issues · avwo/help · GitHub