下面这个图, 我想大家都是很熟悉的, 尤其是中间那个金字塔模型. 我们看到的这三层, 自底向上是单元测试, 接口测试, UI测试.为什么它是理想模型,因为单元测试占据了大部分的内容,从数据上来讲,二八原则,单元测试能解决80%的缺陷.可以,它对测试人员的要求高啊, 贵啊, 时间少啊. 所以,它是理想模型.
在前些年, 大家提到自动化的时候, 多数时候是在说UI自动化测试, 请看测试冰淇淋模型. 由于现在用户对页面越来越挑剔, 或者说是各大厂商越来越讨好用户, 在界面上换着花样儿让用户保持新鲜. 那对测试人员来讲, 可就是灾难了. UI天天变, 最近特别多, 根本就没法进行自动化的测试, 是吧. 所以, 不能使用测试金字塔来把整个测试行为理想化, 那我们总可以取个平衡吧, 那就是少一点UI自动化, 多一点接口测试. 嗯, 对,那就是橄榄球模型.
说起接口测试,面试必备是吧,一般都会是基于协议的,大部分是基于HTTP协议,对它的各种部分各种提问,以及用什么工具之类的,大家都门儿清.面试通过,兴高采烈地进了公司,蛮正规的,倡导测试及早介入,单元测试做不了,那就做接口吧.分析完开发给的接口文档,各种工具准备妥当,使用Fiddler发个请求试试.哦豁,500!抓瞎了,咋整,你这接口都没好,可让我怎么测试!!
如果这时候,你的业务分析以及测试用例还有各种相关的工作都妥了,还是想及早介入接口测试,也不是没有办法.技术界就是这样,不会挡住上进的孩子的,总会给你一条路,那就是Mock.
Mock是啥呢? Mock 是测试过程中中常见的一种技术,即对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,从而把测试与测试边界以外的对象隔离开。
引用《淘宝网-接口测试白皮书》中的对 Mock 的定义
在测试当中,mock 是指使用各种技术手段模拟出各种需要的资源以供测试使用。
被 mock 的资源通常有以下特征:
1.被测目标依赖该资源
2.该资源可能因为各种原因不稳定、返回结果不断变化或者并不总是能够获取到
3.该资源跟被测目标本身质量无关
这些资源可能是一个外部或底层接口、一个系统、一组数据对象或者是一整套目标软件 的工作环境等。
通过 mock 避免对外部真实资源的依赖实现对被测目标的孤立测试,从而大 大降低测试的难度,节约测试成本。
那在什么时候用到Mock呢
1.单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付)
2.我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性
那Mock要遵循什么原则才能用得恰到好处呢?我们可以基于两个原则:
1.不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务/急需测试的对象进行mock。
2.如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,
无需关心所依赖的低层对象的质量。
Mock又有两种, Local Mock和Remote Mock, 它们的区别在于区别在于依赖对象的行为调用是本地/远程调用
1.Mock本地依赖对象 如果依赖对象的调用是本地调用,就属于Local Mock。EasyMock/Mockito都可以实现对本地依赖对象的Mock。 2.Remote Mock 如果被测对象依赖对象的是一些远程服务(HTTP/RPC服务),就属于Remote Mock,Remote Mock一般实现对指定的服务/接口、客户端(消费者)进行Mock。
可以通过Mock Server等方式去实现。
那怎么又快又好地Mock一个接口呢? Postman可以Mock, 但是最近发现了一个更加易用的工具, rap2.
Rap2是啥?
RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校验真实接口正确性, 围绕接口定义,通过一系列自动化工具提升我们的协作效率。
我们的口号:提高效率,回家吃晚饭!
可视化编辑,完善的版本控制,各种格式的导入导出。让前后端约定接口的工作变得十分简单
RAP会自动根据接口文档生成Mock接口,这些接口会自动生成模拟数据,支持复杂的生成逻辑。
rap2就是一款在线模拟数据生成器,可以拦截Ajax请求,其作用在于帮助前端工程师独立于后端进行开发,实现前后端分离
咋个操作?
1. 邮件注册,登陆: http://rap2.taobao.org/account/login
2. 界面介绍
a. 首页:登录后展示操作记录,仅为记录,无回溯功能
b. 仓库:个人仓库,团队仓库列表及入口处,可以在此处新建个人仓库
c. 团队:展示已加入团队,可新建团队,进入团队中可查看团队仓库
d. 接口:一些接口使用信息
e. 状态: RAP服务使用状态数据图表展示,主要是用户数量增长,仓库活跃度排名
3. 新建仓库
4. 设置请求参数和响应内容
新建参数:
新建响应, 可以每个键值手动输入
也可以导入: 直接把自己需要的数据的代码格式粘贴过来
导入之后如下所示:
这样我们就Mock好了一个接口. 那接下来我们来测试一下, 这个接口是否能够正常按照我们需求来响应.
我们使用Fiddler尝试一下请求的发送.
1. 先来构建这个请求
点击如下图如示, 即可拿到该接口的URL
2. 发送请求
在Composer里输入选择请求的方法Get, 输入URL以及参数: http://rap2.taobao.org:38080/app/mock/245167/api/get_event_list?eid=1
点击Excute.
3. 在左边的请求列表中找到刚才的请求, 查看响应
这样一比对完, 发现刚才发送的请求能够正常获取到我们定制的响应.
Mock一个接口就这样轻松愉快地完成了. 当然, 这只是最简单的Demo, 在实际工作过程中, 一定会比这复杂. 奥力给!