一、背景
測(cè)試小伙伴們?cè)?023年保障了團(tuán)隊(duì)線上系統(tǒng)0問(wèn)題,這簡(jiǎn)直就是一項(xiàng)了不起的壯舉!這得益于咱們測(cè)試組同事對(duì)工作的細(xì)致投入、風(fēng)險(xiǎn)把控、以及嚴(yán)格遵循流程規(guī)范進(jìn)行測(cè)試用例評(píng)審、自動(dòng)化建設(shè)、聯(lián)調(diào)推動(dòng)、回歸驗(yàn)證、常態(tài)化壓測(cè)、大促高保真壓測(cè)、引流回放等多重保險(xiǎn)策略工作。尤其是測(cè)試團(tuán)隊(duì)在流量錄制回放方面的實(shí)踐經(jīng)驗(yàn)非常豐富,還貢獻(xiàn)了不少文檔,簡(jiǎn)直是測(cè)試界的大佬啊!
本文從研發(fā)的的視角去看待流量回放這個(gè)問(wèn)題,或許也能提供一些有趣的觀點(diǎn)呢。
文檔內(nèi)容說(shuō)的不一定對(duì),歡迎專業(yè)的測(cè)試大佬鞭打我的思維火花!這樣對(duì)我來(lái)說(shuō)也是成長(zhǎng)。
二、流量回放
從系統(tǒng)穩(wěn)定性角度出發(fā),任何需求我都會(huì)跟小組團(tuán)隊(duì)強(qiáng)烈要求一點(diǎn),不要影響線上既有功能,做好DUCC開關(guān)快速止血。(太多的COE報(bào)告歷史經(jīng)驗(yàn)教訓(xùn)都是因?yàn)樯暇€某功能B最終導(dǎo)致之前功能A出問(wèn)題,比如修改了公共的某些方法等)那如何保障不影響線上既有功能呢,自動(dòng)化測(cè)試是一方面,但流量回放比對(duì)才是最佳的方式。
流量回放原理其實(shí)就是錄制線上真實(shí)的流量,到預(yù)發(fā)引流環(huán)境進(jìn)行回放,對(duì)比生產(chǎn)和預(yù)發(fā)環(huán)境錄入接口的子調(diào)用、響應(yīng)差異去定位代碼問(wèn)題。流量回放用例的創(chuàng)建成本很低,使得每次迭代全量回歸有了理論基礎(chǔ)。優(yōu)點(diǎn)是業(yè)務(wù)代碼零侵入、真實(shí)鏈路調(diào)用、多場(chǎng)景、數(shù)據(jù)可查、結(jié)果diff比對(duì)、問(wèn)題定位精準(zhǔn),提前發(fā)現(xiàn)問(wèn)題。風(fēng)險(xiǎn)是操作不慎可能導(dǎo)致線上問(wèn)題,比如依賴的下游接口流量暴漲,或者寫操作導(dǎo)致線上臟數(shù)據(jù),最終影響業(yè)務(wù)

??
三、流量錄制
流量來(lái)源哪里?肯定是線上真實(shí)流量靠譜,可以包含實(shí)時(shí)的流量也可包含歷史流量(離線錄制的流量),或者人為造的測(cè)試流量(造的流量也是參考線上歷史流量有價(jià)值的)
其實(shí)流量錄制核心關(guān)心的是錄制的流量夠不夠,是否能覆蓋這次代碼改動(dòng)牽扯的業(yè)務(wù)場(chǎng)景。
1、流量規(guī)則
流量過(guò)濾:
R2支持過(guò)濾規(guī)則設(shè)置,通過(guò)可視化配置:支持字段級(jí)過(guò)濾規(guī)則配置,僅錄制符合規(guī)則的流量?;蛘咦远x腳本:當(dāng)過(guò)濾規(guī)則較為復(fù)雜時(shí),可使用自定腳本,編寫過(guò)濾代碼。
流量去重:
有時(shí)R2可能錄制到非常多的相同流量,如果某些系統(tǒng)不需要的話,可能造成后續(xù)回放耗時(shí)較長(zhǎng)和問(wèn)題排查效率低下。需要思考如何能在保證接口覆蓋率的情況下盡可能減少相同流量的數(shù)量。通過(guò)這種機(jī)制在一些場(chǎng)景大幅度減少了錄制流量數(shù)量,提高了流量的使用效率。當(dāng)然大部分場(chǎng)景是不需要去重的,如果需要去重流量不清楚現(xiàn)在R2是否可以通過(guò)自定義腳本支持(比如根據(jù)10個(gè)入?yún)⑵渲械?個(gè)入?yún)?lái)判斷重復(fù)的邏輯)。
?
2、場(chǎng)景覆蓋度
為了使用戶了解錄制到流量的覆蓋程度,如:是否存在場(chǎng)景缺失?是否存在我們不知道的場(chǎng)景等,R2特此開發(fā)錄制場(chǎng)景覆蓋度功能,幫你更了解你的生產(chǎn)流量。
案例:
比如Promise社區(qū)團(tuán)購(gòu)業(yè)務(wù)只有晚上20點(diǎn)后才會(huì)有這種特殊的業(yè)務(wù),故需要思考你本次回放的代碼是否需要覆蓋該場(chǎng)景,則需要錄制回放晚上20點(diǎn)后流量。
所以流量錄制回放多久合適?是2小時(shí)、4小時(shí)還是多久,評(píng)判標(biāo)準(zhǔn)就是場(chǎng)景覆蓋度。

??
3、大促&春節(jié)特殊場(chǎng)景流量
為什么要單獨(dú)談一下大促&春節(jié)特殊場(chǎng)景的流量,比如Promise很多場(chǎng)景是只有大促才會(huì)有的,比如預(yù)售場(chǎng)景。這部分流量日常根本獲取不到,就算你錄制回放線上1個(gè)月流量也是無(wú)用的。這樣的特殊場(chǎng)景流量用于日?;胤欧浅S袃r(jià)值。尤其是改了大促場(chǎng)景需求或者大促前上線了N個(gè)需求,可能影響到大促特殊場(chǎng)景功能正確性。那具體如何做呢?我想到的如下思路:
1.是不是可以通過(guò)R2的流量錄制,通過(guò)入?yún)⑦^(guò)濾獲取這部分特殊場(chǎng)景流量,但需要思考不影響大促當(dāng)天線上系統(tǒng)性能。并且要求接口入?yún)⒖梢詤^(qū)分哪些是大促特殊場(chǎng)景的流量。
2.如果接口依賴很多下游,這需要思考,他們的結(jié)果mock保留起來(lái) 或者其他方式
3.或者根據(jù)logbook日志找出大促特殊場(chǎng)景的業(yè)務(wù) 入?yún)?、出參等等。然后人為整理流量,但這耗時(shí)耗力。
當(dāng)然因?yàn)闀r(shí)間久遠(yuǎn),大促特殊場(chǎng)景的流量我們核心是需要入?yún)?,?dāng)時(shí)的出參結(jié)果可能價(jià)值不大,因?yàn)楝F(xiàn)在跑結(jié)果可能就是不一樣,當(dāng)然具體因系統(tǒng)而定。
四、回放
回放分離線DIFF和實(shí)時(shí)DIFF。實(shí)時(shí)DIFF適合業(yè)務(wù)場(chǎng)景時(shí)效性比較強(qiáng),例如:計(jì)費(fèi)、活動(dòng)等類型的場(chǎng)景。這些場(chǎng)景因?yàn)闀r(shí)效性,不能使用流量錄制來(lái)進(jìn)行 Diff 測(cè)試。實(shí)時(shí) Diff 恰好可以幫助我們進(jìn)行此類場(chǎng)景 diff 測(cè)試。但如果對(duì)時(shí)間特別敏感的,實(shí)時(shí) Diff也是會(huì)存在回放失敗率。 為了能實(shí)現(xiàn)將 回放時(shí)間 倒回到 錄制時(shí)間,不知道現(xiàn)在R2是否支持,可將錄制時(shí)間戳傳遞給服務(wù)(比如System.currentTimeMillis() 這種native方法,動(dòng)態(tài)修改方法體的字節(jié)碼,代理掉業(yè)務(wù)對(duì)該方法的調(diào)用,動(dòng)態(tài)替換為R2事先定義的獲取時(shí)間方法從而保證時(shí)間替換。)
流量回放一般牽扯讀接口、讀寫接口、寫接口。
1、讀接口回放
對(duì)只讀接口進(jìn)行不mock的回放能夠在上線前的最后階段進(jìn)行一次兜底的回歸校驗(yàn)。但需要注意的是,當(dāng)前是只讀的接口難以保證后續(xù)的變更不會(huì)引入寫操作。
案例:
Promise時(shí)效域-下傳控制 之前一直是只讀接口,在2023年期間上線了門店產(chǎn)能占用寫邏輯,但團(tuán)隊(duì)有次線上流量回放忘了這個(gè)寫的新功能,導(dǎo)致占用線上產(chǎn)能了(唯一幸運(yùn)點(diǎn)的是占用產(chǎn)能波次跟線上是一致,不會(huì)導(dǎo)致產(chǎn)能波次占用錯(cuò)誤)
臨時(shí)解決方案:
團(tuán)隊(duì)制定規(guī)則,如果讀接口變成讀寫,則需要去Ducc引流環(huán)境把對(duì)應(yīng)寫功能的開關(guān)關(guān)閉,同理發(fā)送MQ同理也是通過(guò)開關(guān)關(guān)閉。并且每次回放前都進(jìn)行人工校驗(yàn)寫鏈路,但這能不能做到 或者效率也是個(gè)問(wèn)題,暫時(shí)未想到更好的方法。
2、寫接口回放
1.在流量回放中,讀接口和寫接口回放的方式有很大不同。事實(shí)上,這不只是流量回放的特點(diǎn)。即使是傳統(tǒng)接口自動(dòng)化測(cè)試,讀接口和寫接口的測(cè)試策略也是有很大不同的。
2.讀接口和寫接口的不同,在于讀接口沒(méi)有副作用,而寫接口有副作用。寫接口的副作用通常體現(xiàn)在會(huì)對(duì)被測(cè)系統(tǒng)產(chǎn)生臟數(shù)據(jù)上。
3.寫接口需要注意可能操作不慎導(dǎo)致回放的接口中調(diào)用產(chǎn)生臟數(shù)據(jù),影響業(yè)務(wù)。
4.如果寫接口,mock的意義不大,如果不操作線上寫,可以搭建一套UAT引流回放寫的環(huán)境,可鏈路的某些服務(wù)或者組件依賴可以mock,當(dāng)然里面可能比較復(fù)雜,比如數(shù)據(jù)的操作,mysql,redis等UAT環(huán)節(jié)。結(jié)果比對(duì)不是簡(jiǎn)單的diff比對(duì)。則應(yīng)該是去看具體關(guān)鍵數(shù)據(jù)、log日志等去驗(yàn)證結(jié)果。如果接口返回的數(shù)據(jù)依賴于數(shù)據(jù)庫(kù)或其他外部系統(tǒng),那么在真實(shí)調(diào)用時(shí)可能會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題,導(dǎo)致測(cè)試結(jié)果不準(zhǔn)確。
5.跟上面搭建的UAT引流環(huán)境類似。參考軍演全鏈路壓測(cè),通過(guò)修改錄制的流量數(shù)據(jù),通過(guò)修改入?yún)?,傳遞forcebot標(biāo)識(shí),代碼識(shí)別到forcebot標(biāo)識(shí),走對(duì)應(yīng)軍演影子環(huán)境。數(shù)據(jù)線上有mysql影子庫(kù),Redis等影子環(huán)境,寫操作是直接寫到影子里。

??
JSF接口MOCK失敗

??
3、讀寫接口回放
讀寫接口分為讀和寫。核心是偏讀,內(nèi)部部分邏輯是寫,針對(duì)這,讀遵循上面的原則即可,寫可以采用如下方式
1.通過(guò)Mock方式返回,不會(huì)真實(shí)操作寫動(dòng)作,不會(huì)污染應(yīng)用數(shù)據(jù)。R2支持各種中間件Mock,不詳細(xì)講解。
2.通過(guò)DUCC開關(guān)關(guān)閉寫的邏輯。
案例:比如Promise上面說(shuō)的產(chǎn)能占用邏輯&發(fā)送MQ就是通過(guò)DUCC開關(guān)關(guān)閉該邏輯。

??
4、是否應(yīng)該Mock回放
1.Mock回放與接口是否讀寫操作并沒(méi)有直接的聯(lián)系。只是日常習(xí)慣寫接口mock,讀用線上真實(shí)。但對(duì)于讀接口,既可以使用Mock回放,也可以不使用Mock回放;而對(duì)于寫接口,同樣可以選擇使用Mock回放或不使用Mock回放
2.Mock回放與非Mock回放之間的本質(zhì)區(qū)別在于:Mock回放是一種白盒測(cè)試方法,而非Mock回放則是一種黑盒測(cè)試方法。
5、回放覆蓋率統(tǒng)計(jì)
我們是否已經(jīng)全面錄制了流量?回放測(cè)試是否存在代碼盲區(qū)?如何證明我們的測(cè)試足夠全面?或許你也曾有過(guò)這樣的疑慮。為了解決這個(gè)問(wèn)題,R2支持離線回放代碼覆蓋率。覆蓋率統(tǒng)計(jì)回放,即流量回放的同時(shí),支持被測(cè)代碼覆蓋率統(tǒng)計(jì),并生成覆蓋率報(bào)告。

??
?
五、Diff結(jié)果比對(duì)
1.制定靈活的回放結(jié)果比對(duì)策略,減輕排錯(cuò)成本:比如忽略哪些字段,核心關(guān)注哪些出參,需要對(duì)API接口的出入?yún)⒓皹I(yè)務(wù)非常熟悉,需要制定合理的對(duì)比策略,根據(jù)場(chǎng)景的不同,靈活采用關(guān)鍵字段對(duì)比、結(jié)構(gòu)對(duì)比等策略。
2.有些Diff比對(duì)不一致,只能分別去查看logbook日志尋找原因,有些是因?yàn)榛胤诺臅r(shí)候業(yè)務(wù)修改了配置導(dǎo)致,有些是真正的bug問(wèn)題,則需要及時(shí)修復(fù)然后再次引流回放。
3.有些需求改了邏輯,需要的就是Diff不一樣,這時(shí)候流量回放的目的不是為了比對(duì),而是用線上流量豐富測(cè)試用例,讓測(cè)試更加精準(zhǔn)。
?
我是研發(fā),是一個(gè)測(cè)試小白,文章內(nèi)容可能有些不完全準(zhǔn)確,希望通過(guò)您的指正和建議來(lái)不斷完善和改進(jìn)。
審核編輯 黃宇
-
測(cè)試
+關(guān)注
關(guān)注
9文章
6465瀏覽量
131741 -
接口
+關(guān)注
關(guān)注
33文章
9620瀏覽量
157722
發(fā)布評(píng)論請(qǐng)先 登錄
CW25 R2評(píng)估板:輕松探索CW25 R2模塊功能
Ansys Lumerical FDTD R2 安裝教程及安裝包分享
艾德克斯IT8200交流負(fù)載-儲(chǔ)能PCS研發(fā)測(cè)試 科瑞杰
滴滴自動(dòng)駕駛與廣汽埃安新一代Robotaxi R2獲得北京智能網(wǎng)聯(lián)汽車道路測(cè)試牌照
如何解決變頻器能量回饋等問(wèn)題
廣汽埃安與滴滴自動(dòng)駕駛新一代Robotaxi R2交付
使用簡(jiǎn)儀科技產(chǎn)品構(gòu)建高速數(shù)據(jù)流盤與回放系統(tǒng)解決方案
MokuOS 4.1新增儀器功能:高速信號(hào)采集記錄回放儀
電能質(zhì)量在線監(jiān)測(cè)裝置歷史波形能回放嗎?
寬帶采集存儲(chǔ)回放系統(tǒng)在衛(wèi)星領(lǐng)域的應(yīng)用
T/R組件測(cè)試中的三階互調(diào)失真詳解
Hunter OCT-8A如何一站式解決光貓功率校驗(yàn)與流量測(cè)試難題
英飛凌將為Rivian的R2平臺(tái)供應(yīng)用于電動(dòng)汽車牽引逆變器的功率模塊
研發(fā)視角淺談R2流量回放測(cè)試
評(píng)論