0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

研發(fā)視角淺談R2流量回放測試

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-12 15:16 ? 次閱讀

一、背景

測試小伙伴們在2023年保障了團隊線上系統(tǒng)0問題,這簡直就是一項了不起的壯舉!這得益于咱們測試組同事對工作的細致投入、風險把控、以及嚴格遵循流程規(guī)范進行測試用例評審、自動化建設、聯(lián)調推動、回歸驗證、常態(tài)化壓測、大促高保真壓測、引流回放等多重保險策略工作。尤其是測試團隊在流量錄制回放方面的實踐經驗非常豐富,還貢獻了不少文檔,簡直是測試界的大佬??!

本文從研發(fā)的的視角去看待流量回放這個問題,或許也能提供一些有趣的觀點呢。

文檔內容說的不一定對,歡迎專業(yè)的測試大佬鞭打我的思維火花!這樣對我來說也是成長。

二、流量回放

從系統(tǒng)穩(wěn)定性角度出發(fā),任何需求我都會跟小組團隊強烈要求一點,不要影響線上既有功能,做好DUCC開關快速止血。(太多的COE報告歷史經驗教訓都是因為上線某功能B最終導致之前功能A出問題,比如修改了公共的某些方法等)那如何保障不影響線上既有功能呢,自動化測試是一方面,但流量回放比對才是最佳的方式。

流量回放原理其實就是錄制線上真實的流量,到預發(fā)引流環(huán)境進行回放,對比生產和預發(fā)環(huán)境錄入接口的子調用、響應差異去定位代碼問題。流量回放用例的創(chuàng)建成本很低,使得每次迭代全量回歸有了理論基礎。優(yōu)點是業(yè)務代碼零侵入、真實鏈路調用、多場景、數(shù)據(jù)可查、結果diff比對、問題定位精準,提前發(fā)現(xiàn)問題。風險是操作不慎可能導致線上問題,比如依賴的下游接口流量暴漲,或者寫操作導致線上臟數(shù)據(jù),最終影響業(yè)務

wKgZomaQ2EGAUM_mAADe4gQ-gzI956.png

??

三、流量錄制

流量來源哪里?肯定是線上真實流量靠譜,可以包含實時的流量也可包含歷史流量(離線錄制的流量),或者人為造的測試流量(造的流量也是參考線上歷史流量有價值的)

其實流量錄制核心關心的是錄制的流量夠不夠,是否能覆蓋這次代碼改動牽扯的業(yè)務場景。

1、流量規(guī)則

流量過濾:

R2支持過濾規(guī)則設置,通過可視化配置:支持字段級過濾規(guī)則配置,僅錄制符合規(guī)則的流量?;蛘咦远x腳本:當過濾規(guī)則較為復雜時,可使用自定腳本,編寫過濾代碼。

流量去重:

有時R2可能錄制到非常多的相同流量,如果某些系統(tǒng)不需要的話,可能造成后續(xù)回放耗時較長和問題排查效率低下。需要思考如何能在保證接口覆蓋率的情況下盡可能減少相同流量的數(shù)量。通過這種機制在一些場景大幅度減少了錄制流量數(shù)量,提高了流量的使用效率。當然大部分場景是不需要去重的,如果需要去重流量不清楚現(xiàn)在R2是否可以通過自定義腳本支持(比如根據(jù)10個入?yún)⑵渲械?個入?yún)砼袛嘀貜偷倪壿嫞?/p>

?

2、場景覆蓋度

為了使用戶了解錄制到流量的覆蓋程度,如:是否存在場景缺失?是否存在我們不知道的場景等,R2特此開發(fā)錄制場景覆蓋度功能,幫你更了解你的生產流量。

案例:

比如Promise社區(qū)團購業(yè)務只有晚上20點后才會有這種特殊的業(yè)務,故需要思考你本次回放的代碼是否需要覆蓋該場景,則需要錄制回放晚上20點后流量。

所以流量錄制回放多久合適?是2小時、4小時還是多久,評判標準就是場景覆蓋度。

wKgaomaQ2EKASGymAAKle7AVlt8311.png

??

3、大促&春節(jié)特殊場景流量

為什么要單獨談一下大促&春節(jié)特殊場景的流量,比如Promise很多場景是只有大促才會有的,比如預售場景。這部分流量日常根本獲取不到,就算你錄制回放線上1個月流量也是無用的。這樣的特殊場景流量用于日?;胤欧浅S袃r值。尤其是改了大促場景需求或者大促前上線了N個需求,可能影響到大促特殊場景功能正確性。那具體如何做呢?我想到的如下思路:

1.是不是可以通過R2的流量錄制,通過入?yún)⑦^濾獲取這部分特殊場景流量,但需要思考不影響大促當天線上系統(tǒng)性能。并且要求接口入?yún)⒖梢詤^(qū)分哪些是大促特殊場景的流量。

2.如果接口依賴很多下游,這需要思考,他們的結果mock保留起來 或者其他方式

3.或者根據(jù)logbook日志找出大促特殊場景的業(yè)務 入?yún)?、出參等等。然后人為整理流量,但這耗時耗力。

當然因為時間久遠,大促特殊場景的流量我們核心是需要入?yún)?,當時的出參結果可能價值不大,因為現(xiàn)在跑結果可能就是不一樣,當然具體因系統(tǒng)而定。

四、回放

回放分離線DIFF和實時DIFF。實時DIFF適合業(yè)務場景時效性比較強,例如:計費、活動等類型的場景。這些場景因為時效性,不能使用流量錄制來進行 Diff 測試。實時 Diff 恰好可以幫助我們進行此類場景 diff 測試。但如果對時間特別敏感的,實時 Diff也是會存在回放失敗率。 為了能實現(xiàn)將 回放時間 倒回到 錄制時間,不知道現(xiàn)在R2是否支持,可將錄制時間戳傳遞給服務(比如System.currentTimeMillis() 這種native方法,動態(tài)修改方法體的字節(jié)碼,代理掉業(yè)務對該方法的調用,動態(tài)替換為R2事先定義的獲取時間方法從而保證時間替換。)

流量回放一般牽扯讀接口、讀寫接口、寫接口。

1、讀接口回放

對只讀接口進行不mock的回放能夠在上線前的最后階段進行一次兜底的回歸校驗。但需要注意的是,當前是只讀的接口難以保證后續(xù)的變更不會引入寫操作。

案例:

Promise時效域-下傳控制 之前一直是只讀接口,在2023年期間上線了門店產能占用寫邏輯,但團隊有次線上流量回放忘了這個寫的新功能,導致占用線上產能了(唯一幸運點的是占用產能波次跟線上是一致,不會導致產能波次占用錯誤)

臨時解決方案:

團隊制定規(guī)則,如果讀接口變成讀寫,則需要去Ducc引流環(huán)境把對應寫功能的開關關閉,同理發(fā)送MQ同理也是通過開關關閉。并且每次回放前都進行人工校驗寫鏈路,但這能不能做到 或者效率也是個問題,暫時未想到更好的方法。

2、寫接口回放

1.在流量回放中,讀接口和寫接口回放的方式有很大不同。事實上,這不只是流量回放的特點。即使是傳統(tǒng)接口自動化測試,讀接口和寫接口的測試策略也是有很大不同的。

2.讀接口和寫接口的不同,在于讀接口沒有副作用,而寫接口有副作用。寫接口的副作用通常體現(xiàn)在會對被測系統(tǒng)產生臟數(shù)據(jù)上。

3.寫接口需要注意可能操作不慎導致回放的接口中調用產生臟數(shù)據(jù),影響業(yè)務。

4.如果寫接口,mock的意義不大,如果不操作線上寫,可以搭建一套UAT引流回放寫的環(huán)境,可鏈路的某些服務或者組件依賴可以mock,當然里面可能比較復雜,比如數(shù)據(jù)的操作,mysql,redis等UAT環(huán)節(jié)。結果比對不是簡單的diff比對。則應該是去看具體關鍵數(shù)據(jù)、log日志等去驗證結果。如果接口返回的數(shù)據(jù)依賴于數(shù)據(jù)庫或其他外部系統(tǒng),那么在真實調用時可能會出現(xiàn)數(shù)據(jù)不一致的問題,導致測試結果不準確。

5.跟上面搭建的UAT引流環(huán)境類似。參考軍演全鏈路壓測,通過修改錄制的流量數(shù)據(jù),通過修改入?yún)ⅲ瑐鬟fforcebot標識,代碼識別到forcebot標識,走對應軍演影子環(huán)境。數(shù)據(jù)線上有mysql影子庫,Redis等影子環(huán)境,寫操作是直接寫到影子里。

wKgZomaQ2EOAI1g8AAOcnuxmpzk226.png

??

JSF接口MOCK失敗

wKgZomaQ2EWAD5CvAAQk8EaV77Y628.png

??

3、讀寫接口回放

讀寫接口分為讀和寫。核心是偏讀,內部部分邏輯是寫,針對這,讀遵循上面的原則即可,寫可以采用如下方式

1.通過Mock方式返回,不會真實操作寫動作,不會污染應用數(shù)據(jù)。R2支持各種中間件Mock,不詳細講解。

2.通過DUCC開關關閉寫的邏輯

案例:比如Promise上面說的產能占用邏輯&發(fā)送MQ就是通過DUCC開關關閉該邏輯。

wKgaomaQ2EWALFVJAACNyAn68ec613.png

??

4、是否應該Mock回放

1.Mock回放與接口是否讀寫操作并沒有直接的聯(lián)系。只是日常習慣寫接口mock,讀用線上真實。但對于讀接口,既可以使用Mock回放,也可以不使用Mock回放;而對于寫接口,同樣可以選擇使用Mock回放或不使用Mock回放

2.Mock回放與非Mock回放之間的本質區(qū)別在于:Mock回放是一種白盒測試方法,而非Mock回放則是一種黑盒測試方法。

5、回放覆蓋率統(tǒng)計

我們是否已經全面錄制了流量?回放測試是否存在代碼盲區(qū)?如何證明我們的測試足夠全面?或許你也曾有過這樣的疑慮。為了解決這個問題,R2支持離線回放代碼覆蓋率。覆蓋率統(tǒng)計回放,即流量回放的同時,支持被測代碼覆蓋率統(tǒng)計,并生成覆蓋率報告。

wKgZomaQ2EaAYKPKAAIiWqiOVbo970.png

??

?

五、Diff結果比對

1.制定靈活的回放結果比對策略,減輕排錯成本:比如忽略哪些字段,核心關注哪些出參,需要對API接口的出入?yún)⒓皹I(yè)務非常熟悉,需要制定合理的對比策略,根據(jù)場景的不同,靈活采用關鍵字段對比、結構對比等策略。

2.有些Diff比對不一致,只能分別去查看logbook日志尋找原因,有些是因為回放的時候業(yè)務修改了配置導致,有些是真正的bug問題,則需要及時修復然后再次引流回放。

3.有些需求改了邏輯,需要的就是Diff不一樣,這時候流量回放的目的不是為了比對,而是用線上流量豐富測試用例,讓測試更加精準。

?

我是研發(fā),是一個測試小白,文章內容可能有些不完全準確,希望通過您的指正和建議來不斷完善和改進。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試
    +關注

    關注

    8

    文章

    4927

    瀏覽量

    125956
  • 接口
    +關注

    關注

    33

    文章

    8257

    瀏覽量

    149968
收藏 人收藏

    評論

    相關推薦

    功放測試解決方案分享——壓電振動能量回收裝置

    功放測試解決方案分享——壓電振動能量回收裝置
    的頭像 發(fā)表于 08-30 11:48 ?83次閱讀
    功放<b class='flag-5'>測試</b>解決方案分享——壓電振動能<b class='flag-5'>量回</b>收裝置

    AD8221差分放大電路的輸入阻抗是不是由R1,R2決定呢?

    請問加了直流通路后,這個電路的輸入阻抗是不是由R1,R2決定呢?小于1k歐?
    發(fā)表于 08-21 06:26

    INA818輸入直接取電阻R2兩端兩點電壓,兩點壓差范圍約為2mV~200mV,是否可以直接作為INA818的輸入呢?

    INA818, INA317現(xiàn)在要放大的電壓是一個電流鏡鏡像之后的電流流過一個采樣電阻R2的直流電壓,計劃用INA818來放大,放大輸出電壓作為ADC的輸入。 請問以下設置是否合理呢
    發(fā)表于 08-09 06:29

    開爾文法測電阻的r1r2如何選擇

    的影響,從而提高測量精度。在實際應用中,選擇合適的r1和r2對于測量結果的準確性至關重要。 一、開爾文法測電阻的原理 歐姆定律:V = IR,其中V是電壓,I是電流,R是電阻。 開爾文法的基本思想:在未知電阻的四個端點上施加電壓
    的頭像 發(fā)表于 08-05 09:40 ?252次閱讀

    AMC1311 R1 R2 R3的阻值是應該選取哪個等級呢?

    我在用AMC1311做母線電壓采集,輸入電壓是420v,請問,R1 R2 R3的阻值是應該選取哪個等級呢?R級?k級?M級?感謝
    發(fā)表于 08-01 08:14

    如何提高BP神經網(wǎng)絡算法的R2

    BP神經網(wǎng)絡(Backpropagation Neural Network)是一種廣泛應用于模式識別、分類、預測等領域的前饋神經網(wǎng)絡。R2R-squared)是衡量模型擬合優(yōu)度的一個重要指標,其值
    的頭像 發(fā)表于 07-03 09:55 ?510次閱讀

    專業(yè)寬帶射頻記錄回放解決方案

    一、概述 射頻記錄回放設備是一種專業(yè)的測試工具,廣泛應用于無線通信、雷達系統(tǒng)、電子對抗、頻譜監(jiān)測以及科研教學等多個領域。應用背景廣泛且多樣, 對于評估系統(tǒng)的性能、查找故障、優(yōu)化參數(shù)等方面都具有
    的頭像 發(fā)表于 06-25 17:36 ?500次閱讀
    專業(yè)寬帶射頻記錄<b class='flag-5'>回放</b>解決方案

    視覺新紀元:解碼LED顯示屏的視角、可視角、最佳視角的最終奧秘

    在璀璨奪目的LED顯示屏世界里,每一個絢爛畫面的背后,都離不開三個關鍵概念:視角、可視角與最佳視角。這些術語不僅是衡量顯示效果的重要標尺,也是連接觀眾與精彩內容的橋梁。讓我們一起走進這場視覺盛宴,探索那些讓LED顯示屏如此引人入
    的頭像 發(fā)表于 06-23 02:55 ?462次閱讀
    視覺新紀元:解碼LED顯示屏的<b class='flag-5'>視角</b>、可<b class='flag-5'>視角</b>、最佳<b class='flag-5'>視角</b>的最終奧秘

    麻醉針針管流量測試儀簡述

    文章由濟南三泉智能科技有限公司提供針管流量測試儀是用于檢測醫(yī)用針管流量性能的專用儀器。以下是關于針管流量測試儀的詳細介紹:一、概述針管
    的頭像 發(fā)表于 05-27 11:56 ?218次閱讀
    麻醉針針管<b class='flag-5'>流量</b><b class='flag-5'>測試</b>儀簡述

    LT4363-2過壓關斷功能失效是哪里出的問題?

    輸入電壓為24V,使用該電路實現(xiàn)過欠壓關斷功能,當IN端輸入電壓過高或過低是,通過UV和OV點的分壓實現(xiàn)控制MOS關斷。 測試時發(fā)現(xiàn):模擬測試R2電阻失效時,將R2短路后,此時計算OV
    發(fā)表于 05-27 07:12

    使用電感器再度改善運算放大器的真零輸出

    它很簡單,只需簡單改動即可提高效率。如果固定R1和R1′的值(使輸入功率也固定),則輸出電壓將在圖形Eo=Eo(R2)上出現(xiàn)一個極值。為便于達到這個極值,可以將圖1的電路修改為圖2,其
    發(fā)表于 01-31 16:27 ?432次閱讀
    使用電感器再度改善運算放大器的真零輸出

    ALIENWARE外星人全新ALIENWARE m16 R2全面升級

    全新ALIENWARE m16 R2搭載英特爾酷睿Ultra H系列處理器和NVIDIA GeForce RTX 40系列筆記本電腦GPU,支持NVIDIA DLSS 3.5 AI升頻技術
    發(fā)表于 01-12 10:21 ?711次閱讀

    升降梯能量回饋技術原理和測試案例

    電梯梯是日常生活中常用的電器設備,在電梯下降的過程中因為制動會產生大量的能量,設備該怎樣這部分能量轉化存儲下來呢?今天就和大家聊一下升降梯能量回饋技術和相關測試方案。
    的頭像 發(fā)表于 12-03 10:15 ?4124次閱讀
    升降梯能<b class='flag-5'>量回</b>饋技術原理和<b class='flag-5'>測試</b>案例

    量回饋電子負載主要以哪種方式工作?

    量回饋電子負載主要以哪種方式工作? 能量回饋電子負載是一種將多余的電能進行回饋利用的裝置,它主要以以下幾種方式工作:能量回饋的基本原理、應用領域、工作過程、優(yōu)點和挑戰(zhàn)等方面。 I. 能量回
    的頭像 發(fā)表于 11-16 11:01 ?553次閱讀

    制作86智能屏,用安信可的小安派-Eyes-R1/R2

    和AiPi-Eyes-S1/S2沒啥區(qū)別(實際上也沒多大的區(qū)別),但是從屏幕的幀率上看,R1/R2是比S1/S2有優(yōu)勢的: 最大的改變就是使用了4寸的RGB接口顯示屏,分辨率達到480
    的頭像 發(fā)表于 10-23 17:55 ?482次閱讀
    制作86智能屏,用安信可的小安派-Eyes-<b class='flag-5'>R</b>1/<b class='flag-5'>R2</b>