“流量回放” 在系统重构中的测试实践

栏目: 编程工具 · 发布时间: 6年前

内容简介:在互联网公司尤其是创业阶段,通常会

“流量回放” 在系统重构中的测试实践

本文作者谢林,VIPKID 自动化测试技术专家,将于 MTSC2019 大会分享《“流量回放” 在多耦合系统重构中的测试实践》, 文末有抽奖福利

前言

在互联网公司尤其是创业阶段,通常会 面临业务快速增长、系统调整扩容,越来越多的重构拆分项目森然林立,回归测试工作变得繁重且紧急 ,这对测试开发相关的同学带来很大的压力。面对越来越多的回归测试任务,以及公司自动化测试薄弱的现状,笔者不得不动些脑筋,着手开发一些针对性的辅助 工具 来提高回归测试的效率。

经过近半年的努力,笔者在公司内部落地并实践了这种 “流量回放” 的回归测试策略。于 2017 年 10 月至 2018 年 7 月, 连续 3 个季度帮助公司重构项目实现 0 漏测;重构类项目平均测试提效 60% ;项目整体周期平均缩短 20% 。下面就简要分享下“流量回放” 在系统重构中的测试实践。

系统重构带来的挑战

因为是在互联网创业公司,同时在严重业务驱动背景下,公司研发过程并不规范,系统功能相关文档缺失,甚至一些系统或功能因人员流失导致失修或无人知晓。

于是系统重构面对这样的局面:

  • 没有相关设计文档和系统功能用例

  • 没有系统重构开发和回归测试范围

  • 没有自动化测试工具和充足项目时间

那么在这样的局面之下,我们该如何保障系统重构质量,如何提升回归测试的效率呢?

快速界定重构开发和回归测试范围

系统重构伊始,首先要告诉开发人员哪些系统子服务和接口需要进行重构,哪些废弃的接口需要删除。但是面对一个没有文档,耦合严重的系统,重构开发范围识别相对困难,服务依赖相对严重,单个服务测试边界也模糊不清。

为了明确罗列重构服务接口,笔者利用在线系统 Ng 日志帮助快速的识别重构开发和回归测试范围,因为已经废弃的接口在 Ng 日志中不会存在。最终拿到 Ng 结果分析:用户常用到的接口占比 70%,核心接口占比 20%,废弃接口占比 10%。另外查询类接口占比 80%,写入类接口占比 20%。

“流量回放” 在系统重构中的测试实践

通过线上流量分析,开发人员迅速搞明白待重构的服务及接口清单。但是一个完整的系统回归测试工作量异常巨大的,若单纯依靠人工测试,无疑是一场噩梦,特别是在项目追赶进度,测试时间不充裕的情况下更是困难重重。 系统重构需要依据子服务分而治之,通过子服务间的流量分析来界定各个子服务的重构接口列表和回归测试范围。

巧借 “流量回放” 实现程序自动化回归测试

如果把服务看作一个黑箱,服务请求看作输入,那么服务返回即为结果输出。

“流量回放” 在系统重构中的测试实践

倘若新、旧服务对所有相同请求的返回结果完全一致,那么就可以判定新、旧服务功能实现是一致的。基于这个判定依据,笔者做了如下工具设计:

“流量回放” 在系统重构中的测试实践

用户对系统的请求,系统内部服务之间的请求都可以通过线上流量获取,用户流量充当系统级别的回归测试用例,系统内部之间服务间的流量可以充当服务级别的回归测试用例。每次流量采样都能对接口覆盖率,测试量级做到按需控制,为自动化回归测试提供便利。

整个自动化回归测试的原理浅显易懂,但是笔者在实践中还是遇到了一些实际问题,这里做些整理,方便读者借鉴。

“流量回放” 实践遇到的问题

REST 风格 API 流量识别

REST 风格的 API 开发已经非常流行了,但是对于 REST 风格的 API 流量识别对笔者却造成了一定的麻烦。

  • /api/user/{name}

  • /api/user

  • /api/user/{id}

比如说上述的 API 描述,想要对其流量区分识别需要实现一定的算法。在实践中笔者使用了基本的字典树原理,因为相对较简单,这里就不再赘述了。如上风格的 API 描述需要借助一些开源工具,如 Swagger。

“流量回放” 在系统重构中的测试实践

GET 请求结果对比中的降噪处理

笔者在落地实践过程中遇到返回完全相同的 get 请求其实并不多,很多请求返回都会携带一些时间戳或者其他 token 等随机噪声。因此在做 get 请求数据返回对比时需要进行一定的降噪处理。

“流量回放” 在系统重构中的测试实践

通常我们的服务接口的返回结果都是结构化的,比如 Json 或者 Xml。我们对同一服务连续两次请求,结果不同的地方即是随机噪声点。如上图所示,两次请求的对比即可轻易的识别噪声位置。然后如下图所示,通过噪声识别,新、旧服务结果返回,利用一定的对比算法即可轻松的识别返回结果是否真实的存在差异。

“流量回放” 在系统重构中的测试实践

同时在测试过程中还可以对服务进行一定的高并发压力测试,帮助识别在相同的测试环境下新、旧服务之间的接口性能改善情况。也可以对本次回归测试的服务接口覆盖率、测试量、接口性能等信息生成详尽的回归测试报告。

“流量回放” 回归验证平台结构图

“流量回放” 在系统重构中的测试实践

其他问题

除此之外还有很多实践中遇到的问题,例如:

  • 线上流量如何抓取

  • 测试流量如何管理和流量编辑

  • 测试流量如果绕过鉴权控制

  • POST 写操作场景的尝试

关于 ““流量回放” 在多耦合系统重构中的测试实践 更多问题应对的细节信息,笔者将于 MTSC2019 测试开发大会 上做更全面详细的介绍,期待届时能与各位同行进行现场交流。

MTSC2019 预告|8 折倒计时

MTSC2019 第五届中国移动互联网测试开发大会将于 2019 年 6 月 28-29 日 在北京国际会议中心举行,50+ 来自 Google、BAT、TMD 等一线互联网企业的测试大咖分享精彩议题,涵盖 移动自动化测试、服务端测试、质量保障 QA、高新测试技术(AI+、大数据测试、IOT 测试),游戏测试,工程效率提升 等专题。( 目前确认  40+  议题,  8  折门票限时优惠中!)

“流量回放” 在系统重构中的测试实践

大会官网 http://2019.test-china.org/

报名地址 :https://www.bagevent.com/event/2202999?bag_track=YT

TesterHome 福利时间

转发文章到朋友圈,抽奖赠送 TesterHome 定制版精美礼物(卫衣/图书等)、MTSC2019 测试开发大会门票或优惠折扣,以及其他福利等! “流量回放” 在系统重构中的测试实践

  • Step1: 转发本文到朋友圈,扫描二维码加小助手微信;

  • Step2 : 回复「 福利 」入群抽奖;

  • SteP3 : 回复「 组团 」入群,以 团购优惠价 购买 MTSC2019 门票;

“流量回放” 在系统重构中的测试实践

P.S. 对于  MTSC  往届参会者 ,可享受 7.5 折福利 ,请联系票务负责人,也可进群咨询;

扫描二维码,或点击“ 阅读原文 ,抢购 8 折 门票!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript & jQuery

JavaScript & jQuery

David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99

You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具