zoukankan      html  css  js  c++  java
  • 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层定义插库代码的正常性。
    思而不学则殆
  • 相关阅读:
    01.网页学习阶段、整站分析、规划
    书签搬运
    如何判断两个链表相交及找到第一个相交点
    Windows平台使用git bash管理github中的工程
    二级指针的操作
    结构体的内存对齐
    大端和小端
    剑指Offer——面试题26:复杂链表的复制
    使用editcap命令将ERF格式转换为pcap格式
    如何在STL的map中使用结构体作为键值
  • 原文地址:https://www.cnblogs.com/sunyllove/p/14302698.html
Copyright © 2011-2022 走看看