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層定義插庫代碼的正常性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM