【效率提高】引流錄製迴歸實踐

【關鍵導讀】結合jvm-sandbox-repeater+diffy二次開發實系統新老版本回歸對比測試html

一、總體執行方案

針對repeater-console進行了二次開發,使得侵入應用服務錄製請求信息到數據庫存儲,進而經過訪問開放的迴歸測試api,實現將錄製的流量回放到diffy的代理入口,完成diff測試的目的git

二、Jvm-sandbox-repeater

官方地址:https://github.com/alibaba/jvm-sandbox-repeatergithub

repeater的能夠應用到哪些場景?docker

業務快速回歸數據庫

  • 基於線上流量的錄製/回放,無需人肉準備自動化測試腳本、準備測試數據api

線上問題排查服務器

  • 錄製回放提供"昨日重現"能力,還原線上真實場景到線下作問題排查和Debug架構

  • 動態方法入參/返回值錄製,提供線上快速問題定位app

壓測流量準備dom

  • 0成本錄製HTTP/Dubbo等入口流量,做爲壓測流量模型進行壓測

實時業務監控

  • 動態業務監控,基於核心接口數據錄製迴流到平臺,對接口返回數據正確性進行校驗和監控 目前對repeater的應用主要是業務快速回歸,基於線上流量的錄製存儲

  • 業務實施:

step0 安裝sandbox和插件到應用服務器 curl -s http://sandbox-ecological.oss-cn-hangzhou.aliyuncs.com/install-repeater.sh | sh step1 修改repeater.properties,啓用遠程拉取配置

step2 在NDP修改應用啓動參數,指定錄製應用名和環境,-Dapp.name=${錄製應用名} -Dapp.env=${錄製環境} ,這個會在錄製的信息中存儲這兩個字段信息

step3 attach模式字節碼加強到業務應用 attach模式下,錄製應用名和錄製環境這兩個參數都會被默認爲unknown。 # 啓動命令 ~/sandbox/bin/sandbox.sh -p ${被錄製應用進程號} -P ${repeater啓動端口} # 關閉命令 ~/sandbox/bin/sandbox.sh -S ${被錄製應用進程號}

step4 根據本身配置的協議,HTTP/Java/Dubbo進行請求錄製,如錄製成功在repeater.log會打出具體的TraceId,若是是本地模式同時在~/.sandbox-module/repeater-data/record/文件中會寫入TraceId關聯的錄製數據 若是# 是否開啓脫機工做模式repeat.standalone.mode=false,會將錄製信息推送到遠端服務進行存儲

具體的數據庫表信息,存儲以下:

 

2.1 Jvm-sandbox-repeater架構分析圖

 

三、repeater-console

基於開源簡單二次開發,變動功能:

  • 經過配置中心實現配置動態變動

  • 根據錄製信息實現回放diffy對比測試

3.1 動態配置變動

jvm-sandbox-repeater配置能夠經過遠端服務拉取的方式:

# 配置文件拉取地址 repeat.config.url=http://xxxx/facade/api/config/%s/%s

xxxx爲repeater-console服務

3.1.1 錄製回放配置字段說明

這個配置的解讀,主要依賴com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig類以及調用到這個類中方法的邏輯的說明。

 

3.1.2 動態配置實現

基於配置中心提供的註解@ConfigNotify("repeater_config"),添加RepeatConfigListener,實現動態配置

 

3.2 回放diffy對比測試

提供api可對外訪問執行迴歸diff測試:http://xxxx/facade/api/regress/test,參數名爲appName和env,選擇運行指定應用和環境下的錄製請求

 

1)動態配置訪問的diffy服務:String proxy = difyDomainConfigListener.getDiffyConfig().getString(appName);根據不一樣應用獲取指定的diffy服務,由於diffy服務在啓動時與應用服務是綁定的,1個應用服務目前只能對應單獨的diffy

2)啓動迴歸執行會當即返回,採用異步後臺運行的方式;

3.3 diffy對比測試

3.3.1 diffy原理及部署

如下爲原理圖,很是清楚的說明了diffy的對比測試的原理,在此不過多闡述

 

採用rancher實現diffy容器化部署,以下所示:

CMD配置啓動參數:

-candidate=xxx1:8080 -master.primary=xxx2:8080 -master.secondary=xxx3:8080 -service.protocol=http -serviceName=httpDNS-Service -proxy.port=:8880 -admin.port=:8881 -http.port=:8888 -summary.email=xxx

3.3.2 diffy回放測試效果

整體回放對比結果:

單個請求diff結果:

 

四、總結一下

1)基於diffy的對比實踐中遇到一個問題,若是response data中list是隨機的,那麼就會出如今穩定版本及其副本對比時,也會有差別,若是降噪,會把實際須要對比的response data也給降噪掉,若是不降噪,那麼久有可能每個請求都是有差別的,進而沒有達到diff快速回歸的效果(面對這種服務暫時沒有好的解決辦法)

2)基於diffy的對比接口,爲了保證不對線上業務產生影響以及髒數據,目前實施的都是讀接口以及冪等寫接口

3)JVM-sandbox-repeater在這個方案中只是使用了錄製功能,應該要結合repeater的回放、mock等部分,完成錄製回放及mock應用體系化測試

 

能夠參考學習的資料:

JVM-sandbox-repeater github開源:https://github.com/alibaba/jvm-sandbox-repeater

JVM-sandbox-repeater:https://testerhome.com/topics/20868

docker diffy:https://hub.docker.com/r/diffy/diffy

diffy github開源:https://github.com/twitter/diffy

【延伸閱讀】

網易數帆:【解決方案】智能UI自動化測試

網易數帆:【解決方案】性能壓測及分析調優實踐

網易數帆:【解決方案】1萬+接口測試與管理的進階之路

相關文章
相關標籤/搜索