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

作者: Daniel_Guo | 来源:发表于2017-07-06 16:33 被阅读263次

    背景

    最近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貌似抓不到包,只显示请求错误,只有不挂证书的才能抓包。

    相关文章

      网友评论

        本文标题:iOS开发之如何模拟数据(一)

        本文链接:https://www.haomeiwen.com/subject/bdohhxtx.html