背景
最近APP上线了一个版本,但是上线后发现测试数据(应该是接口返回的,但是写死了)没有删除,导致线上出现严重的BUG。
问题
那么如何在开发中使用测试数据。通常情况下为了方便使用,我们会在代码中直接创造一些假数据使用,方便快捷,但是这不仅污染了代码(测试数据一大堆),而且有时候你正在改一个东西时被其他事情打断了,回来后又忘了改掉测试数据就尴尬了。所以这是中不好的习惯。
解决办法:
一、本地搭建测试服务器:
就是本地自己搭个服务器,然后把开发时需要拦截的网络请求地址改为自己搭建的服务器地址,然后返回自己自定义的JSON数据。但这种方式也有三个缺点:
- 有一定门槛,虽然搭建服务器是很简单的事,并不是所有人都会,也是需要一定的学习成本的。
- 还是要修改源码中网络请求的地址,这虽然已经把源码污染降到最低了,但毕竟还是有。
- 要想模拟不同的网络状态,还需去修改服务器的代码,不方便。
二、网络代理
第二种就是利用现有的网络代理软件,直接拦截对应的网络请求,然后返回本地写好的JSON数据。
- 不会污染代码,代码写的就是线上的逻辑,接口地址不需要改变,也不需要写测试数据。
- 拦截起来很方便,许多网络代理软件,都自带拦截甚至改写网络请求的功能,所以启动拦截功能很方便。
- 方便调试,网络代理一般都有改变一个网络请求状态的功能,可以轻松实现返回网络错误、网络超时和延迟网络请求等不同的网络请求状态的功能,非常方便。
下面介绍一下如何通过charles的map local功能实现接口请求拦截,然后返回自己生成的json数据。
map local设置流程
Charles配置:
1、Proxy -> Proxy Settings ,填入代理端口8888 ,并且勾选 “Enable transparent HTTP proxying"
iPhone设置:
- 首先保证iphone和你的mac在同一网段
- 获取mac电脑的ip地址
- 进入手机设置 -> 无线局域网 -> 选中连接的wifi -> 进入wifi详情 -> 切换 ”HTTP代理“为手动 -> 输入mac电脑对应的ip地址和代理端口8888
- 连接之后,Charles会弹出提示框,点击allow之后,手机请求网络就会走代理(mac电脑)。
mac local配置
1、 Tools -> Map Local...
2、 勾选 ” Enable Map Local“
3、点击 ”Add“添加要拦截的接口地址(可以直接把整个连接填入 Host选项,它自己会识别各个选项)。
4、填写Local Path,这个是你本地json文件的路径
5、点击”OK“添加完毕,启动APP,当调用这个接口的时候,代理就会拦截接口请求,然后返回你本地的JSON文件中的json数据。
参考链接:
问题:
https抓包问题:
1、Charles: Proxy -> SSL Proxying Settings -> Enable SSL Proxying -> 添加你要拦截的Host
2、手机安装HTTPS证书
通过电脑浏览器打开http://charlesproxy.com/getssl
下载对应系统的证书,然后通过邮件发送给手机,手机下载安装验证。
3、证书信任
1、iOS低版本系统,好像不需要证书信任也能拦截到https
2、iOS10.3真机抓包https,手机设置 -> 通用 -> 关于本地 ->底部证书信任设置 -> 打开charles证书信任 才能抓包。挂证书的API貌似抓不到包,只显示请求错误,只有不挂证书的才能抓包。