mockito mock void方法_接口测试时,数据mock为何如此重要?

14a2542d4793c95ec02e2d477d0d79d5.png
数据mock,即在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。在接口测试中,数据mock是最常用的方法。那么,为什么接口测试需要做数据mock呢?博为峰就和大家来说说。 1、为什么要做mock测试?
工作中遇到以下问题,博为峰认为可以使用mock解决:
1、无法控制第三方系统某接口的返回,返回的数据不满足要求;
2、某依赖系统还未开发完成,就需要对被测系统进行测试;
3、有些系统不支持重复请求,或有访问访问频次限制。如不可重复支付,获取敏感信息的接口访问频次不可高于xx等。 2、mock测试的实现原理
一般测试场景中,都是对接口的返回数据进行mock。以http协议为例。
1)最简单的mock,可在mock服务器上保存一份mock数据,并给此mock数据生成对应的url。将要访问的第三方url,以mock url代替,这样即可满足最基本的mock需求。可在此处了解到更多关于此种mock的信息。

88b062c95ade53045d396d63674e8cf9.png
2)使用proxy实现mock。wiremock/anymock等开源工具可提供此实现。好处在于:
① 可查看请求及回应,方便获取mock数据的原型;
② 匹配到规则的请求会返回mock数据,未匹配到的请求访问原服务;
③ 无需修改服务配置,无需重启服务;
最近有接触到一些函数级别的mock。比如,mockito这个工具,即可实现不发出请求,即可获得mock数据的功能。 3、数据mock的好处 1)团队可以并行工作
有了mock,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切;后端与后端之间如果有接口耦合,也同样能被mock解决;测试过程中如果遇到依赖接口没有准备好,同样可以借助mock;不会出现一个团队等待另一个团队的情况。
这样的话,开发自测阶段就可以及早开展,从而发现缺陷的时机也提前了,有利于整个产品质量以及进度的保证。 2)开启TDD模式,即测试驱动开发
单元测试是TDD实现的基石,而TDD经常会碰到协同模块尚未开发完成的情况,但是有了mock,这些一切都不是问题。当接口定义好后,测试人员就可以创建一个mock,把接口添加到自动化测试环境,提前创建测试。 3)可以模拟那些无法访问的资源
比如说,你需要调用一个“墙”外的资源来方便自己调试,就可以自己mock一个。 4)隔离系统
假如我们需要调用一个post请求,为了获得某个响应,来看当前系统是否能正确处理返回的“响应”,但是这个post请求会造成数据库中数据的污染,那么就可以充分利用mock,构造一个虚拟的post请求,我们给他指定返回就好了。 5)可以用来演示
假如我们需要创建一个演示程序,并且做了简单的UI,那么在完全没有开发后端服务的情况下,也可以进行演示。说到演示了,假如你已经做好了一个系统,并且需要给客户进行演示,但是里面有些真实数据并不想让用户看到,那么同样,你可以用mock接口把这些敏感信息接口全部替换。 6)测试覆盖度
假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是有些返回在正常情况下基本不会发生,难道你要千方百计地给系统做各种手脚让他返回以便测试吗?比如,我们需要测试在当接口发生500错误的时候,app是否崩溃(别告诉我你一定要给服务端代码做些手脚让他返回500啊)?
而使用mock,这一切就都好办了,想要什么返回就模拟什么返回,妈妈再也不用担心我的测试覆盖度了,哈哈。 4、如何mock数据? 1)安装Node.js ,通过http-server开启本地服务器
获取端口http://localhost:8000,然后通过在文件夹创建html和json文件来测试数据。示例:

5327107c3eb17317546780b1d97b7151.png
我们打开浏览器的控制台就能看到输出的数据。

format,png
2)通过线上来mock数据
使用 https:// easy-mock.com
使用 http:// rapapi.org/org/index.do
以第一种为例,进入网站后建立个人项目。进入项目后,通过创建接口进入。

0f0ac537718c8ff8d914ebd88c0267c0.png
接着,选择接口类型↓↓↓

53c7b62aee4d99e244b746cd172da024.png

94a5f605a3c99ae894d75637b7831db1.png

700efcdaa88cb7fd1db187acde104099.png
进行创建和进行查看↓↓↓

b3d087858b116b6be85c55495f8b540f.png
控制台结果↓↓↓

162b814f4680f43adf7bf4b0dd994ce5.png
5、特殊场景下,对mock数据的处理
有些场景对于mock来说较为特殊。比如,某接口对数据有加解密操作,这使得mock的数据无法直观理解,无法有效率地调整mock数据的内容以完成测试目标。另外,有些rpc协议不具通用性,通用的mock平台来支持此类协议成本太高。所以,我们的需要对我们的方法做一些变通。
1)对于接口加解密数据,我们开发一个函数,来支持mock数据的加解密。手工测试时,该函数可表现为mock平台的插件;接口自动化时,可表现为处理mock数据的函数。
2)直接将这个函数的逻辑整体mock掉。开发某功能:当程序运行到指定的方法时,不继续运行函数体,而是发送一个http请求到mock平台,将mock数据return出去。

原文作者:初入前端的小菜鸟

原出处:简书

转载声明:以上内容与图片均来源于网络,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。本文仅作为交流使用,不涉及商用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值