java化测试神器-流量回放平台

文章结构

  • 基本介绍
  • 使用流程
  • 实现方案
  • 总结

基本介绍

背景

目前公司正在进行php java化迁移工作。
Java化测试本质上是一次回归工作。在测试过程中,我们发现某些后端字段类型的变更,app OK,m站却出了问题。人工的测试难免有疏漏和不足。为了让java化后的接口返回和线上一致,避免对前端的影响,所以流量回放工具诞生了!

流量回放工具有以下几个优点:

  • 可以抓取app、m站、小程序流量
  • 支持流量的反复回放
  • 可自设参数去抓精准流量
  • 对比快且精准,基本上不会有纰漏
  • 支持json respone和db的精准对比

目前遗憾的是无法抓取java流量进行对比

技术选型

架构图

发现bug示例

  1. 缺失返回类 – 全球购订单报关失败没有出来报关失败相关提示,商品上未出现双12佣金卡立减icon
    bug ex1
  2. 额外返回类 – h5多返回了 发布心得的文案
    bug ex2
  3. 返回不一致类 – 贝店oid返回不一致,后端处理oid丢失精度
    bug ex3
  4. 服务器报500可以快速发现
  5. 网关层接收参数变更,导致网关层报错快速发现

使用流程

目前流量回放工具支持3种流量的回放,两种对比方式。
首先,我们先介绍下线上流量的抓取和回放。

一、线上流量抓取和回放

1.抓取线上流量

首先需配置bconf(该配置作用为设置抓取线上流量的百分比,如设置5则为抓取5%流量)
抓取线上流量

配置之后,会时时抓取对应接口流量,并存储在流量回放平台。

2.创建回放任务
创建回放任务

Ps:仅支持GET接口,随机抓取线上流量在线上环境和预发环境上回放对比

二.自设流量

支持POST和GET接口,可设置指定账号,指定传参,自定义请求回放对比
自设流量

流量抓取回放之后,就可以查看回放结果了。

线上和自设流量目前支持的是JSON对比。

JSON对比,可切换展示变化值和完整值,支持对比白名单和排序规则,详情中支持二次编辑并重复回放。

1.任务结果详情
任务结果详情

2.JSON结果对比

红色为预发对比于线上缺少的内容,绿色为预发对比于线上新增的内容
JSON结果对比

3.其他BONUS功能

1.线上方式回放前预览测试流量在线上的返回结果

2.对比时设置白名单字段,不对比无需对比字段(如字段类型不一致无需对比)

3.设置排序规则解决数组乱序导致对比结果不直观问题

流量回放工具还支持以场景方式去录制回放,该录制方式支持入库数据结果比对。

场景对比1

场景对比2

实现方案

  • 整体架构图
    架构图
  • 流量抓取核心逻辑
  1. php流量
    在Rest_base_controller里设置抓取流量逻辑,并发送给rocketmq
    php流量
  2. java流量
    因为java是多应用模式,并且如果流量抓取做在网关层,可能会影响到网关性能,所以决定使用dubbo 自定义filter机制,抓取流量,接入应用需要导入相关jar包(实现网关层调用各应用dubbo服务的流量抓取),目前还未支持。
  • 流量录制回放核心逻辑
  1. 录制流程
    线上流量 – 直接消费mq消息获取php抓取的流量
    自设流量 – 根据前端获取的入参,构造请求在线上直接请求,并回传流量信息
  2. 回放流程
    相关抽象方法如下:
    createTask – db插入回放记录访问记录id
    doTask – 根据获取的流量选择环境执行回放,catch异常回滚db
    getSuspectObject – 进行对比相关操作,获取对比返回值更新记录db
    finishTask – 所有相关数据更新db
    回放流程
  • response对比核心逻辑
    当初设计是后端进行对比,前端根据对比结果展示,但是前端对比的三方框架更加完善,支持排序、白名单等操作,所以后面采用后端返回json前端进行对比展示操作。
    前端框架 github地址:https://github.com/benjamine/jsondiffpatch
     response对比核心逻辑

总结

    1. 流量回放平台解决了大量切换环境、并且手动对比的重复冗余工作,并且实现了精确对比的目标,帮助开发测试人员发现一些靠肉眼手动无法发现的问题,让大量开发测试人员纷纷发出了“流量回放平台”真香的感叹,后期甚至可以针对java化测试工作完全脱离于APP,直接利用平台进行测试,减少大量人力(当然一些字段的定义还是去依赖APP去确定)
    2. 线上流量随机回放的应用可以帮助测试人员实现提前灰度的效果,自设流量可以帮助测试人员精准覆盖各种特殊场景的case,db的对比更能直接深入到db层定义插库代码的正常性。
posted @ 2021-01-20 14:28  sunyllove  阅读(995)  评论(0编辑  收藏  举报