与Fiddler旗鼓相当的mock工具!

liam
• 阅读 1024

前言

一大早测试部的老大就召集我们开了个会——原因是我们组负责的业务除了个线上漏测,用户的投诉跟雪花似的纷至杳来。

公司门口那个巨大的显示屏就在那轮播着用户反馈,好几屏都是用户在吐槽这个bug。

没啥可说的,该背的锅还是要背的,那个漏测也不算冤,测试同事造不出那个异常场景,心中侥幸,觉得不至于异常会导致客户端出现啥问题。偏偏它就出了问题!

后来组里开会复盘了下,决定以后在测试环节里引入mock测试工具协助测试。

主要为了解决我们测试过程中遇到的以下问题:

a.代码存在多个接口依赖的问题,造出测试场景费时费力,且有时由于代码设计和业务隔离的问题无法造出来
b.涉及到外部第三方资源,无法调试外部代码内部情况,无法造出特定场景
c.后台开发还没有完成,由于进度赶,需要提前测试前端问业务

mock测试是个啥

mock这个英文单词的意思是模拟,在测试流程中指的是对不容易构造或不容易获取的对象,用一个虚拟的对象来创建以便测试。大致可分为两类:

客户端 Mock:在被测服务内部工作,直接拦截被测服务的 API 请求方法,直接从方法内部返回预定义的 Mock 响应。

服务端 Mock:在被测服务外部工作,作为 HTTP 服务器接收被测服务发送的 API 请求,并返回预定义的 Mock 响应。

到底要怎么搞

1.直接写代码

python中有个mock模块,支持用mock对象替换掉指定的python对象,达到模拟返回值的效果;
Java中也有jar包——mock server moco,它支持指定配置文件就可开启一个http服务器,支持动态加载。

写代码的优点在于可以完全服务于你所在项目的需求,缺点也很明显,一个迭代版本的需求往往给到的测试时间只有几天,没有时间给测试童鞋写代码来mock。 何况代码也不能保证一次性跑得通,往往调试也要花去很多的时间。

我的想法是——“不要重复造轮子”。市面上其实不乏好些免费的mock工具可以用,只要能够满足我们的目的——可模拟多种异常测试场景,mock配置快速简单。

2.使用mock工具

(1)mock工具的选用原则
接口管理方面: 接口测试一般会涉及数十个甚至上百个接口,这个接口后面还涉及到重构或者版本迭代的问题,因此mock工具需要具备接口管理的功能,能够管理多个版本的接口数据,不要一堆文件胡乱堆着无法处理。

数据构造方面: 接口返回的数据类型和测试数据需要能够做到尽可能少的配置工具和高度仿真,以达到在真实业务场景中测试的效果

场景模拟方面: 能模拟各种异常返回,以及由于接口依赖和资源隔离,业务隔离等原因在测试环境内无法构造出来的场景。

(2)场景Mock工具推荐
a.Fiddler 工具简介:Web调试工具, 它能记录所有客户端和服务器的http和https请求。允许你监视、设置断点、甚至修改输入输出数据。

Fiddler在测试中主要用于拦截接口,篡改接口返回值,来对前端进行调试。

但拦截接口需要设置正则表达式,一个个接口捕捉并修改返回值,对于接口数量少,只需要用到少量接口的测试需求,这个工具还是蛮好用的。

但如果是频繁迭代的需求,一个需求里有上百个接口,那么用Fiddler的效率则不高。
另一个问题是接口返回的数据需要自己手工填入,简单数据还行,复杂数据如base64编码,哈希值等等,那么构造起来非常费时费力。

b.Apifox
工具简介:Apifox提供了接口设计,调试,测试,管理等功能。我们这里只需要用到它的mock功能。
零配置mock Apifox里面预先设置了常见数据类型的mock规则,不需要用户自己配置,直接选择就可以用,目前已经支持非常多常用的数据类型,包括头像,手机号,邮箱,url,地址等,下图是目前无须配置可直接使用的数据类型: 与Fiddler旗鼓相当的mock工具!

如何构造数据: 在接口设计tab,直接在返回参数的mock选项框里选择与参数匹配的数据类型 与Fiddler旗鼓相当的mock工具!

与Fiddler旗鼓相当的mock工具!

自定义mock规则 如果你的项目里需要用到不怎么常见的数据类型,可以自定义mock规则。

与Fiddler旗鼓相当的mock工具!

定义完成之后可以在接口设计>response 参数里直接调用改mock规则。

构造异常测试场景
为了提高测试覆盖率,测试童鞋需要验证当接口返回 异常时客户端是否有容错机制,会不会出现崩溃。

这可以利用mock功能来协助测试。

与Fiddler旗鼓相当的mock工具!

接口管理
一个测试需求/项目常常包含多个测试接口,在Apifox里面可以以项目的形式,通过不同层级的文件夹来对接口进行管理。

与Fiddler旗鼓相当的mock工具!

总结 造测试数据是每个测试童鞋无法避免的一项事务,如果能借助工具,快速地构造测试场景进行用例测试,就能够极大地提高我们的测试效率。

点赞
收藏
评论区
推荐文章
不怕天黑 不怕天黑
3年前
发现Kotlin一个神奇的bug
1、前言本文将会通过具体的业务场景,由浅入深的引出Kotlin的一个bug,并告知大家这个bug的神奇之处,接着会带领大家去查找bug出现的原因,最后去规避这个bug。2、bug复现现实开发中,我们经常会有将Json字符串反序列化为一个对象问题,这里,我们用Gson来写一段反序列代码,如下:kotlinfun<TfromJson(js
liam liam
1年前
不是吧,连公司里的卷王写代码都复制粘贴,这合理?
没错,我,本人,就是那种卷心菜,就是那种想卷但卷不过别人的,我每天吭哧吭哧写代码,写到办公区里空荡荡地只剩下我一个人,但我们组里,就我需求写得最慢,bug写得最多,我弟常问我:“哥,别的同事加班都没你多你绩效一定不错吧?”但、其实是因为我写不过别人,尤其公司里那个卷王,代码写得好,还写得快,改bug测试小姐姐一提他立马响应改好。搞得测试组那边买奶茶常常会
Wesley13 Wesley13
2年前
unittest单元测试框架前言
一.在我们没有学习过python语言的时候领导让我们做接口测试我们都使用工具来做测试,一般常用的如jemeter,postman这些个工具,我来推荐使用postman这个工具来进行接口测试,有的小伙伴们说Fiddler或Charles抓接口,然后进行测试不也成吗?成是成,但是接口测试往往优先于客户端测试并且postman这个工具方便用来模拟异常请求,并
Stella981 Stella981
2年前
FastDFS合并存储的一个深层次bug排查
FastDFSV3引入合并存储(trunkfile)特性后,有用户反馈上传文件提示trunk空间被占用的问题。我在测试环境中经过一通测试,在极其偶然的情况下也能重现这个问题。然后就开始排查这个问题。  FastDFS一个group(存储分组)内有一台storageserver被选举为trunkserver,用于管理和分配该组的trunk可用
Stella981 Stella981
2年前
Jenkins实现SVN .NET持续集成
  在工作过程中,由于经常要提版本给测试,再由测试负责发布,经常会出现,提测一个产品,需要发布多个服务,包括网站,网站的服务,网站的后台管理已经后台管理的服务。总之,一次提测,要发布的东西会非常多,开发麻烦,测试更加麻烦,所以为了解决这个问题,决定采用Jenkins来实现一键发布。一、安装Jenkins  Jenkins下载地址:https
Wesley13 Wesley13
2年前
CTO用“汉德公式”来定责,我大写的服!
开发删库跑路,却让运维背锅?CTO用“汉德公式”来定责,我大写的服!原创Mr.K技术领导力昨天点击“技术领导力”关注∆每天早上8:30推送作者|Mr.K编辑|Emma来源|技术领导力(ID:jishulingdaoli)01开发删库跑路,却让运维背锅?一位同行跟老K讲了一个事情,非常有意思,也挺有启发的,跟大
Stella981 Stella981
2年前
SpringBoot(20)
  我们在写单元测试的时候,除了接口直接抛异常而导致该单元测试失败外,还有种是业务上的错误也代表着该单元测试失败。好比我们在测试接口的时候,  该接口返回是1代表成功,如果是0那就代表是失败的,这个时候可以考虑使用断言。  一、原理我们知道,我们可以通过断言来校验测试用例的返回值和实际期望值进行比较,以此来判断测试是否通过。那我们先来看下如果失败的情
京东云开发者 京东云开发者
8个月前
Java应用堆外内存泄露问题排查 | 京东云技术团队
最近有个java应用在做压力测试,压测环境配置:CentOS系统4核CPU8g内存jdk1.6.0_25,jvm配置serverXms2048mXmx2048m,出现问题,本篇文章是对此次问题的回顾和复盘
京东云开发者 京东云开发者
6个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
京东云开发者 京东云开发者
2个月前
哎呀,当时怎么没有想到 | 京东云技术团队
在我们的测试工作中,是不是经常遇到这样的情形,发生了线上问题,产品、研发或者测试同学一拍脑袋:当时怎么没有想到,怎么给漏掉了呢?明明是一个非常简单的事情,用大拇指都能想到的验证场景,为何当时就漏测了呢?但实际情况是,逃逸到线上的缺陷,疑难杂症式的极端异常的