iOS Developerios-测试/模拟/打包iOS开源项目

iOS开发之如何模拟数据(一)

2017-07-06  本文已影响263人  Daniel_Guo

背景

最近APP上线了一个版本,但是上线后发现测试数据(应该是接口返回的,但是写死了)没有删除,导致线上出现严重的BUG。

问题

那么如何在开发中使用测试数据。通常情况下为了方便使用,我们会在代码中直接创造一些假数据使用,方便快捷,但是这不仅污染了代码(测试数据一大堆),而且有时候你正在改一个东西时被其他事情打断了,回来后又忘了改掉测试数据就尴尬了。所以这是中不好的习惯。

解决办法:

一、本地搭建测试服务器:

就是本地自己搭个服务器,然后把开发时需要拦截的网络请求地址改为自己搭建的服务器地址,然后返回自己自定义的JSON数据。但这种方式也有三个缺点:

  1. 有一定门槛,虽然搭建服务器是很简单的事,并不是所有人都会,也是需要一定的学习成本的。
  2. 还是要修改源码中网络请求的地址,这虽然已经把源码污染降到最低了,但毕竟还是有。
  3. 要想模拟不同的网络状态,还需去修改服务器的代码,不方便。

二、网络代理

第二种就是利用现有的网络代理软件,直接拦截对应的网络请求,然后返回本地写好的JSON数据。

  1. 不会污染代码,代码写的就是线上的逻辑,接口地址不需要改变,也不需要写测试数据。
  2. 拦截起来很方便,许多网络代理软件,都自带拦截甚至改写网络请求的功能,所以启动拦截功能很方便。
  3. 方便调试,网络代理一般都有改变一个网络请求状态的功能,可以轻松实现返回网络错误、网络超时和延迟网络请求等不同的网络请求状态的功能,非常方便。

下面介绍一下如何通过charles的map local功能实现接口请求拦截,然后返回自己生成的json数据。

map local设置流程

Charles配置:

1、Proxy -> Proxy Settings ,填入代理端口8888 ,并且勾选 “Enable transparent HTTP proxying"

14993277462433.png

iPhone设置:

  1. 首先保证iphone和你的mac在同一网段
  2. 获取mac电脑的ip地址
  3. 进入手机设置 -> 无线局域网 -> 选中连接的wifi -> 进入wifi详情 -> 切换 ”HTTP代理“为手动 -> 输入mac电脑对应的ip地址和代理端口8888
  4. 连接之后,Charles会弹出提示框,点击allow之后,手机请求网络就会走代理(mac电脑)。

mac local配置

1、 Tools -> Map Local...

屏幕快照 2017-07-06 下午4.01.24.png

2、 勾选 ” Enable Map Local“

屏幕快照 2017-07-06 下午4.02.49.png

3、点击 ”Add“添加要拦截的接口地址(可以直接把整个连接填入 Host选项,它自己会识别各个选项)。

屏幕快照 2017-07-06 下午4.03.28.png 屏幕快照 2017-07-06 下午4.05.18.png 屏幕快照 2017-07-06 下午4.05.31.png

4、填写Local Path,这个是你本地json文件的路径

屏幕快照 2017-07-06 下午4.05.48.png

5、点击”OK“添加完毕,启动APP,当调用这个接口的时候,代理就会拦截接口请求,然后返回你本地的JSON文件中的json数据。

参考链接:

  1. http://www.jianshu.com/p/afef615c932e
  2. http://www.jianshu.com/p/5539599c7a25

问题:

https抓包问题:
1、Charles: Proxy -> SSL Proxying Settings -> Enable SSL Proxying -> 添加你要拦截的Host

14993296057932.png

2、手机安装HTTPS证书
通过电脑浏览器打开http://charlesproxy.com/getssl
下载对应系统的证书,然后通过邮件发送给手机,手机下载安装验证。
3、证书信任
1、iOS低版本系统,好像不需要证书信任也能拦截到https
2、iOS10.3真机抓包https,手机设置 -> 通用 -> 关于本地 ->底部证书信任设置 -> 打开charles证书信任 才能抓包。挂证书的API貌似抓不到包,只显示请求错误,只有不挂证书的才能抓包。

上一篇下一篇

猜你喜欢

热点阅读