先于服务器端的 Android 开发 (基于 mock 和 fiddler)

2,319 阅读3分钟
原文链接: blog.csdn.net

最近公司项目大重构,由于服务端接口全部规范重写所以进度较慢,与其浪费时间等待接口完成不如自己先根据服务端定义好的文档生成模拟的json数据来继续开发,最后等到服务端接口完成的时候做下联调,做到较高的开发效率

工具介绍

需要用到的工具:
(1)www.mocky.io/
该网站是用来mock http响应的,使用该网站可以生成一个模拟的json响应链接,使用get或者put方式就能获取模拟的json数据
(2)Fiddler 4
用来将上面网站生成的json响应链接转发为服务器端接口域名

具体流程

1.生成mock接口

下面介绍下具体的mock流程
比如服务端有个接口,接口地址是
test.mycompany.com:8080/api/user/userInfo
返回的json数据是:

{
    "code": 1,
    "errorMsg": "",
    "resultData": {
        "uid": 1,
        "nickname": "鲁提辖",
        "sex": 1,
        "region": "拉科鲁尼亚",
        "sign": "今天心情不错",
        "headImage": "http://"
    }
}

我们先可以用www.mocky.io/网站来生成一个模拟的json响应链接
这里写图片描述
然后点击蓝色按钮,在上图绿色位置会生成一个链接,点击进入后如下图
这里写图片描述
这样我们的模拟接口已经完成了,用postman测试一下看看
这里写图片描述
模拟接口确实完成了,数据确实也有了,但是我们的接口地址明明是test.mycompany.com:8080/api/user/userInfo,难道还要在客户端代码里把接口地址也改成 www.mocky.io/v2/58285d22…吗?

2.设置fiddler域名转发

所以我们就需要用到Fiddler 4的域名转发功能了
按照下图设置域名转发规则,设置完记得点击save

这里写图片描述

点击Fiddler菜单项Tools->Telerik Fiddler Options

这里写图片描述

选中https内的decrypt https traffic和ignore server certificate errors两项

这里写图片描述

选中connections内的allow remote computers to connect,默认监听端口为8888,若被占用也可以设置成其他端口

这里写图片描述

3.调试mock接口

设置完fiddler后我们就可以在虚拟机内使用我们的模拟接口了,这里提供两种方法

(第一种方法)推荐:在mock接口的http请求代码中加入代理参数,该方法不影响其他正常接口。
以okhttp为例

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.2.2", 8888)));

10.0.2.2地址为android emulator访问pc的地址(genymotion为10.0.3.2),8888为fiddler的代理端口。

这里写图片描述

(第二种方法)把虚拟机的网络设置端口为8888的代理,该方法可以会影响其他正常接口。

以android emulator为例
设置移动网络的apn代理,设置proxy 10.0.2.2,port 8888(genymotion proxy 10.0.3.2 并且是设置wifi代理)。

这里写图片描述

(重要)设置完毕后一定要开关一下飞行模式,才能正常使用域名转发功能

这里写图片描述

(真机测试)真机测试的话步骤和2一样,用wifi的话设置wifi代理,用移动网络的话设置apn代理,proxy使用pc机的本地IP地址,见下图,端口是fiddler内设置的8888

这里写图片描述

至此所有模拟json响应的步骤全部完成,这样我们就可以在开发的过程中,不需要等待服务器端完成接口就可以直接测试接口数据,等到服务端完成接口后,去掉所有代理设置和关闭fiddler就能正常访问接口了。

参考资料:
blog.csdn.net/guijiaoba/a…
blog.csdn.net/forlong401/…