我们再来回顾一下本章第一小节说到的Mock服务原理
1.jpg
1. 现有服务的缺点
如果我们需要将原本发送给服务端模块的请求,转发到Mock服务上,该如何处理呢?有的同学可能会说,让开发人员把调用接口地址的Host换掉。比如最初的前端页面或后端服务都需要调用http://alipay.com/pay接口,我的Mock服务在http://192.168.1.1/pay,那就让开发人员把Host换成192.168.1.1,后面具体路径我在搭建Mock服务的时候尽量保持一致即可。
显然开发人员是不太情愿帮你做这件事的。那么如何在不修改待测系统配置的情况下完成切换呢?最简单的方式--修改本地Host文件,将alipay.com 映射到 192.168.1.1
但是重要的问题也随之而来了,修改Host之后,所有alipay.com的请求都会被映射到192.168.1.1,那么其他的接口服务,比如login、search,不需要进行Mock如何处理呢?
- 使用抓包工具过滤请求。日常的抓包工具都具有这个功能,核心原理就是:开启Http代理,将地址符合某些匹配规则的请求截获,并转发到Mock服务上。
- 抓包工具毕竟要开,要手动设置,只能算是半自动化。使用AnyProxy、MitmProxy(后面章节我会单独讲解如何使用它做接口用例的录制)。本节先有请AnyProxy登场。
我们的目标架构:
2.png
2. Anproxy的使用
AnyProxy 是一个基于 Node.js 的代理服务器。代理服务器是个中间人,站在了客户端和服务端中间,双方通信的每个比特,都会滴水不漏地经过它。它控制了完整的请求头、请求体、响应头、响应体,可以在客 户端与服务端都无感知的情况下介入处理所有的流程。
官方地址:http://anyproxy.io/cn/
特点:
- 支持 https 明文代理
- 支持低网速模拟
- 支持二次开发,可以用 javascript 控制代理的全部流程,搭建前端个性化调试环境
- 提供web版界面,观测请求情况
安装与配置
npm install anyproxy -g
anyproxy --version显示版本号,说明安装成功。
启动 Anyproxy
anyproxy
但是这样启动anyproxy只能代理http,如果要能代理https,需要执行生成ca证书的命令
anyproxy-ca
回车确认下去既可,然后执行以下命令来启动anyproxy。就可以代理https了
anyproxy -i
如果在浏览器中使用的话去设置代理就好了,如果是移动设置使用的话,连接在对应启动服务器的笔记本电脑中wifi,在wifi中设置对应的代理即可,和fiddler设置代理的操作是一样的。
3.jpg
访问本地8002端口,会看到Anyproxy的前端配置管理页面。
编写Anyproxy的控制代理的规则
进行这一步的前提是你已经开启了Moco,并且像上一小节一样,配置了几个Mock接口服务。然后就要开始配置Anyproxy的转发策略了。
这里使用了Anyproxy的加载外部规则命令
anyproxy --rule sample.js
sample.js是一个外部js文件,用来控制转发策略。我们通过编写该文件实现【客户端在使用被Mock接口时,Anyproxy指向Mock服务器】。js中具体的配置如下。该文件需要保存在Anyproxy的安装路径下的rule_sample目录。
module.exports = { summary: 'Rule to modify request data', *beforeSendResponse(requestDetail, responseDetail) { //这里的意思是:如果URL包含http://alipay.com/pay就修改请求结果,返回一句特定的内容 if (requestDetail.url.indexOf('http://alipay.com/pay') == 0) { const newResponse = responseDetail.response; var newDataStr = 'i-am-anyproxy-modified-post-data'; newResponse.body = newDataStr; return new Promise((resolve, reject) => { resolve({ response: newResponse }); }); } },};
所有本地的请求会被代理转发到Anyproxy。作为一个选择mock接口的中间工具,Anyproxy发现符合筛选规则的地址,就去请求Moco中的数据返回给客户端,不符合条件的直接放行。这样就能起到对特定接口进行Mock而不影响其他未Mock接口的正常使用的效果。
后记
本章节中讲解了如何搭建一个更加智能的Mock服务。如果你想进一步定制它,为你的团队开发一个Mock在线配置平台并集成到我们的测试平台中,请关注七录学院的测试开发付费课程吧。我们下个小节谈谈如何从UI页面,自动化录制接口测试用例。