通用技术 Mock Better 测试策略的改变和实践-续

扫地僧 · 2016年12月02日 · 最后由 suihansongmao 回复于 2019年07月04日 · 2702 次阅读

上一篇介绍了设计思想,并已实现报文篡改,点击传送门,本篇主要介绍 Mock Better 的接口测试

工作图

不同与传统的接口测试

1.传统的接口测试都是基于模拟前端发起请求,验证后端返回报文的正确性,测试对象是后端;Mock Better 的接口测试是基于真实的前端程序发起请求,既可以关注前端传参的正确性,也可以验证后端返回的正确性,这就是我所说的打通前后端测试的任督二脉

关于什么是打通前后端测试,举个真实的典型案例:前天用 Mock Better 做接口测试发现某些报文该加密的接口没有加密,我把问题和持久化的证据链提交给前端开发和后端,在铁证面前,前端承认少传一个和加密相关的参数,后端也承认即便这个参数传过去,也不一定会加密,一个问题,前后端都测试到了,不巧的是前后端都发现各自存在问题。

2.传统的接口测试做场景化,需要解决登陆态、token、盐值、敏感加密、动态参数截取和绑定、特殊请求参数动态生成等一系列复杂问题;Mock Better 的接口场景化是基于用户操作真实的程序,接口串联完全由前后端程序自主实现的。

关于这一点,可能很多人无法理解,举个例子:手机连上 Mock Better 的代理,然后在 App 上购买一个商品,整个购买场景调用的接口和返回的报文,都在 Mock Better 的监视之下,通过代理配置的规则,可以过滤出哪些是需要测试的接口,并根据规则配置的断言判断接口是否异常;

亮点,辅助定位问题

前端通过 AutoTraveler 驱动 App 遍历测试,自动定位错误日志,在之前的自动遍历文章已介绍过。
后端通过 Mock Better 执行接口测试,辅助定位问题,是今天要介绍的一个特性,上面的工作图已表达的比较清楚,这里再细说实现方式:

条件一:有一套完整的日志体系;

条件二:提供日志查询接口服务;

条件三:找出接口通用的唯一性标识,可以是请求参数的某个字段,也可以是响应报文的某个字段,例如:时间戳等。

实现原理:假定接口 A 测试未通过,把接口 A 的唯一性标识作为日志查询接口的过滤条件,调用日志查询接口获取到被测接口的上下文日志,存档作为定位问题的重要线索。

打通前后端测试的尝试

1.进行 UI 测试的同时,同步进行接口测试;

2.既可以关注前端传参的正确性,也可以验证后端返回的正确性。

Mock Better 新特性介绍

1. 接口测试规则列表

初版支持系统规则,后续会支持用户自定义规则。这里是触发和停止接口测试的入口。

2. 接口测试任务列表

通过任务列表,可以查看测试结果。

3. 测试结果详情

默认显示所有接口的测试情况。

点击 “显示失败”,只显示校验未通过的接口。

点击 “定位问题”,开始异步抓取上下文日志,点击 “刷新”,可查看定位问题进度的状态,如果问题已定位,点击 “查看定位日志”。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞

楼主准备开源么?

#1 楼 @jaychang1989 条件允许后会的

想请教两个问题哈:

  1. 如何判断接口失败还是通过,只通过 errorcode 么?
  2. 接口测试规则 具体有哪些规则呢?

#3 楼 @azdbaaaaaa 初版支持系统规则,系统规则满足通用性,例如:httpcode、errorcode 等。
后续版本会支持用户自定义规则,例如:结构校验、内容校验,内容校验包括包含匹配、正则匹配等等。

#4 楼 @quqing 恩,了解了,我最近也只做了基础的 httpcode 和 errorcode 的校验,但是感觉心里没底。很多问题还是要深层次的结果校验感觉才能相信这一份报告,不然和运维的接口监控的也没多大区别了。但是要做深层次的校验的话,要对每个接口指定一个 assert,有些接口还有联动效果,不知道会不会投入太多,但是做出来的东西还是可靠性不佳

#5 楼 @azdbaaaaaa 我之前也有你现在的困惑,我理解的接口测试分为 2 个阶段,其侧重点不同:

1.接口单测阶段:该阶段的侧重点是单个接口的正确性,主要包括以下几点:

a)接口对正常入参和异常入参的正确处理;

b)接口入参结构和响应报文结构是否符合设计;

c)接口返回的错误码是否符合预期;

d)接口返回数据的正确性;

2.接口场景化测试阶段:该阶段想做固化的数据验证,以我的经验很多情况下是不可能的,原因如下:

a)系统越来越复杂,关联方多,无法固化数据环境

b)关联方多,数据权限受限,数据环境重置或无法初始化;

c)无限接近实战业务场景;

Mock Better 的接口测试属于接口场景化测试,设计的愿景如下:

a)寄生于实际使用中的真实业务场景;

b)保留场景化操作过程中前端程序发起的请求参数和后端接口返回的响应报文,可作为证据链;

c)系统规则捕获接口环境问题、错误码对应问题,用户自定义规则抽查数据正确性问题。

结论:接口场景化测试做深层次数据 assert 的代价过于高昂,在接口单测阶段实施深层次数据 assert 更原子化、成本更低,且具有抗干扰和隔离性。当然,接口场景化阶段的数据校验也是需要的,可以运用结构校验、自动化抽查,正则匹配等模糊校验技术。

以上是个人观点,希望对你有所帮助。

#6 楼 @quqing 多谢,所以接口测试还是要以接口单测阶段为主,接口场景化测试阶段为辅,两者结合起来一起做,是吧

#7 楼 @azdbaaaaaa 两者都挺重要,侧重点不同而已

楼主一年过去了,谈谈用起来的感受呗,还有是否准备开源?

楼主思路很好,最近也有这个想法,不知过去这么久,有什么新的想法之类没有?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册