接口测试-Mock测试及Charles使用教程
Mock测试及Charles使用
一、Mock的概念
mock 的意思是模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对上级模块的测试。
这里分为两类测试:前端对接口的mock,后端单元测试中涉及的mock
单纯的前端mock可以通过抓包工具Fiddler,Charles实现,通过修改代理返回的数据,实现多种场景的测试。这里在抓包工具之中会解释。
二、Mock测试是什么
Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。
三、 为什么要进行Mock测试
Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。
四、Mock对象适用场景
1、需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑。
-----比如被测代码中需要依赖第三方接口返回值进行逻辑处理,可能因为网络或者其他环境因素,调用第三方经常会中断或者失败,无法对被测单元进行测试,这个时候就可以使用mock技术来将被测单元和依赖模块独立开来,使得测试可以进行下去。
2、被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理。
1)前后端项目中,后端接口开发完成之前,接口联调;
2)依赖的上游项目的接口尚未开发完成,需要接口联调测试;
-----比如service层的代码中,包含对Dao层的调用,但是,DAO层代码尚未实现
3、被测单元依赖的对象较难模拟或者构造比较复杂。
-----比如,支付宝支付的异常条件有很多,但是模拟这种异常条件很复杂或者无法模拟,比如,查询聚划算的订单结果,无法在测试环境进行模拟。
五、使用Charles进行Mock测试
Charles 64位_4.2.7.4软件下载:
链接:https://pan.baidu.com/s/1sjN735kBYkp28liJJz2yVA
提取码:bqkq
Charles-Proxy-4.2.5-中文版-补丁下载:
链接:https://pan.baidu.com/s/1XKDvyLEEGQxvYgSQ4svikQ
提取码:ckhi
1、主界面介绍
中文版的Charles主界面:
2、Windows网页抓包
1)设置Windows的代理端口
要截取 window上的网络请求,我们首先需要将 Charles 的代理功能打开。选择代理-代理设置…,如下图所示:
默认端口为8888,不需要更改端口号,点击确定即可。
2)设置Windows的SSL代理
选择代理-SSL代理设置…,如下图所示:
点击添加,添加SSL代理。
输入主机: * .* 端口:443
点击确定,443端口会添加到SSL代理位置中。
点击确定,SSL代理便设置成功。
3)安装Charles根证书
设置完代理端口和SSL代理后,发现还是不能请求HTTPS,所以,我们需要安装Charles根证书。选择帮助-SSL代理-安装Charles根证书,如下图所示:
点击安装证书(I)…
选择本地计算机(L),点击“下一步”继续。
选择将所有的证书都放入下列存储§,点击浏览®…。
选择“受信任的根证书颁发机构”,点击确定。
会提示根证书导入成功,点击下一步。
会提示正在完成证书导入向导,点击完成。
出现弹窗导入成功,就证明根证书已经安装成功了。
4)访问HTTPS网页
安装完成后访问HTTPS会会报不安全网页,如果浏览器是最新的,就在空白处点击一下,然后键盘敲入 thisisunsafe ,就可以访问了!
3、手机抓包(以iPhone为例)
1)获取Charles运行所在电脑的IP地址
获取Charles运行所在电脑的IP地址有两种方式。
一是Charles 的顶部菜单的 帮助-本地IP地址,即可在弹出的对话框中看到IP地址,如图所示:
二是win+R输入cmd点击确定,在控制台输入 ipconfig ,也可得到所在电脑的IP地址。
2)设置手机的配置代理
在 iPhone 的 “ 设置 ”–>“ 无线局域网 ” 中,可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888,如下图所示:
设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单,点击 “允许” 即可。
当然如果要抓取iPhone设备上的HTTPS请求,需要在iPhone上也安装一个证书。
3)在Windows上安装移动设备活远程浏览器上安装Charles根证书
在Charles中选择 帮助-SSL代理-在移动设备活远程浏览器上安装Charles根证书,如图所示:
出现提示,则在iPhone手机的浏览器上输入chls.pro/ssl 访问地址,会开始安装证书,安装完成后,iPhone 手机还需要认证下(设置->通用->关于本机->证书信任设置->打开信任),完成后,手机访问页面,在Charles上就可以抓包了。
3)mock数据
手机上执行小程序,运行后找到要mock的接口,这里把要mock(JSON文本)的数据复制下来,右击设置断点和重点。
然后手机再重新执行页面跳转,会跳到断点界面,点击下面的 json编辑。
然后再请求,就会出现mock数据了。