<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          得物流量錄制回放自動(dòng)化測(cè)試實(shí)踐!

          共 5332字,需瀏覽 11分鐘

           ·

          2021-12-24 10:34


          1. 概覽

          得物流量錄制回放平臺(tái)經(jīng)過(guò)幾個(gè)月的建設(shè),目前已經(jīng)支持了多個(gè)域的日常開(kāi)發(fā)回歸工作,沉淀了1000+自動(dòng)化回歸用例,幫助開(kāi)發(fā)人員在上線前發(fā)現(xiàn)了多起隱藏bug。作為一個(gè)階段的小結(jié),僅以此文記錄下得物流量錄制回放體系建設(shè)的經(jīng)驗(yàn)和踩過(guò)的坑,讓大家了解這個(gè)平臺(tái)能干什么,我們是怎么一步步建設(shè)和體系化運(yùn)轉(zhuǎn)的,遇到了哪些困難,又是怎么解決的。希望此文能拋磚引玉,對(duì)如何充分利用好流量錄制回放這個(gè)工具,為業(yè)務(wù)帶來(lái)價(jià)值,做出一點(diǎn)點(diǎn)貢獻(xiàn)。

          2. 背景

          如概覽所言,在得物進(jìn)行流量錄制回放實(shí)踐的初衷是為了解決日常測(cè)試的回歸效率問(wèn)題

          例如發(fā)布前的全場(chǎng)景用例回歸,每次迭代希望實(shí)現(xiàn)對(duì)歷史場(chǎng)景進(jìn)行一次全量且高效的回歸驗(yàn)證。目前業(yè)界通常使用一些自動(dòng)化的手段來(lái)解決人工回歸的效率問(wèn)題。但是這些自動(dòng)化回歸手段也產(chǎn)生了新的問(wèn)題。主要體現(xiàn)在以下幾個(gè)方面:

          • 自動(dòng)化用例編寫成本高。每次新增功能都需要編寫新的自動(dòng)化測(cè)試回歸用例。
          • 自動(dòng)化用例維護(hù)成本高。隨著用例數(shù)量的增加,維護(hù)成本指數(shù)級(jí)上升,代碼變更,包括關(guān)聯(lián)的代碼變更,都可能導(dǎo)致用例失效,需要耗費(fèi)大量精力重新修正自動(dòng)化用例。
          • 為了降低維護(hù)成本,不得已縮減場(chǎng)景覆蓋度以及校驗(yàn)深度,從而導(dǎo)致質(zhì)量保障的效果打了折扣;

          而流量回放的思路有所不同,其測(cè)試用例是基于真實(shí)流量錄制實(shí)現(xiàn)的。在維護(hù)成本和擬真度上有天然的優(yōu)勢(shì)。因?yàn)橛美膭?chuàng)建成本很低,使得每次迭代全量回歸有了理論基礎(chǔ)。在結(jié)果分析的成本上,則與其他測(cè)試手段差別不大。

          3. 平臺(tái)設(shè)計(jì)

          在設(shè)計(jì)得物流量回放平臺(tái)之前,我們參考了當(dāng)前業(yè)界一些公司的流量回放平臺(tái)的設(shè)計(jì)。通過(guò)一些比對(duì)論證,我們發(fā)現(xiàn)一些業(yè)界同類產(chǎn)品設(shè)計(jì)上存在一些誤區(qū),例如:

          • 整套體系的玩法未思考清楚,例如采用無(wú)差別大批量錄制流量,大批量回放 -》比較粗礦的玩法,價(jià)值較低

          • 一上來(lái)就考慮鏈路回放-》技術(shù)挑戰(zhàn)性大,性價(jià)比不高

          • 對(duì)排查問(wèn)題提效的產(chǎn)品設(shè)計(jì)和研發(fā)投入過(guò)低 -》最大的問(wèn)題,會(huì)導(dǎo)致用戶使用意愿降低。

          對(duì)這些問(wèn)題,我們?cè)谠O(shè)計(jì)流量回放平臺(tái)產(chǎn)品的時(shí)候會(huì)有一些自己的思考:

          • 1、精細(xì)化,以應(yīng)用每個(gè)接口的角度進(jìn)行用例沉淀,一個(gè)接口可以對(duì)應(yīng)n筆不同業(yè)務(wù)類型的流量,我們希望終態(tài)能做到每個(gè)接口的每種業(yè)務(wù)類型都有一條回歸用例沉淀下來(lái)

          • 2、先聚焦單應(yīng)用進(jìn)程回放。讓每個(gè)應(yīng)用把流量錄制回放作為一個(gè)日常迭代的基礎(chǔ)check點(diǎn)玩轉(zhuǎn)起來(lái)

          • 3、多次進(jìn)行頭腦風(fēng)暴,從使用方,也就是測(cè)試,業(yè)務(wù)研發(fā)的角度思考如何能更好地在平臺(tái)界面上進(jìn)行錯(cuò)誤問(wèn)題自動(dòng)分類和問(wèn)題提示。結(jié)合平臺(tái)研發(fā)相應(yīng)的技術(shù)攻關(guān),當(dāng)前取得了一定的進(jìn)展。

          在具體的實(shí)施層面,我們采用業(yè)務(wù)測(cè)試,平臺(tái)研發(fā),業(yè)務(wù)研發(fā)三方協(xié)同的模式。任務(wù)分拆如下圖所示:

          產(chǎn)品設(shè)計(jì)是業(yè)務(wù)測(cè)試主導(dǎo)的。因?yàn)閺腝A的角度,業(yè)務(wù)測(cè)試有最豐富的經(jīng)驗(yàn),這樣才能保證最后產(chǎn)出的產(chǎn)品不存在方向性偏差。同時(shí)業(yè)務(wù)測(cè)試還負(fù)責(zé)用例的沉淀和流量回放與得物質(zhì)量保證體系的集成工作。

          平臺(tái)研發(fā)則負(fù)責(zé)jvm sandbox repeater的相應(yīng)二次開(kāi)發(fā)技術(shù)難關(guān)攻關(guān),同時(shí)協(xié)同業(yè)務(wù)測(cè)試進(jìn)行產(chǎn)品設(shè)計(jì)。

          業(yè)務(wù)研發(fā)在得物每個(gè)迭代會(huì)投入少量人力,對(duì)流量回放不成功的用例進(jìn)行分析歸類,如果是業(yè)務(wù)代碼bug造成回放失敗,則進(jìn)行bug修復(fù)。通過(guò)這個(gè)三方協(xié)同模式,每一方可以發(fā)揮各自所長(zhǎng),讓流量錄制回放體系化輪轉(zhuǎn)起來(lái)。

          在得物的整體QA體系中,流量回放短期更加聚焦回歸性質(zhì)的提效,未來(lái)希望探索更多新功能測(cè)試維度的提效。

          • 提測(cè)階段卡點(diǎn):聚焦核心場(chǎng)景,低成本驗(yàn)證每次提測(cè)對(duì)于核心場(chǎng)景的影響;

          • 測(cè)試階段回歸卡點(diǎn):全量場(chǎng)景,重點(diǎn)追求覆蓋場(chǎng)景全面性,驗(yàn)證新功能對(duì)歷史功能的影響;

          • 預(yù)發(fā)環(huán)境回歸:目前得物預(yù)發(fā)跟生產(chǎn)同庫(kù),未來(lái)會(huì)推動(dòng)落地基于預(yù)發(fā)&生產(chǎn)環(huán)境的流量回放,盡可能拉近錄制時(shí)環(huán)境和回放時(shí)環(huán)境的仿真差異,從而降低回放階段的噪音影響;

          4. 技術(shù)選型

          當(dāng)前市面上的錄制回放工具主要分兩類:

          • 一類是諸如go replay之類通過(guò)網(wǎng)絡(luò)抓包,錄制流量,并提供回放功能。
          • 另一類如阿里開(kāi)源的jvm sandbox repeater, 在應(yīng)用進(jìn)程內(nèi)錄制,可以錄制到更精細(xì)的信息。

          例如: 某次數(shù)據(jù)庫(kù)訪問(wèn)操作,某次對(duì)外的redis讀寫操作,等等。根據(jù)這些工具的特性分析,不難發(fā)現(xiàn),go replay這類工具更適合做壓測(cè),jvm sandbox repeater這類工具能更好地支持測(cè)試回歸工作。

          jvm sandbox repeater在回放時(shí)提供了兩大類check點(diǎn),一個(gè)是入口的返回?cái)?shù)據(jù),一個(gè)是子調(diào)用的多調(diào)用和少調(diào)用,包括子調(diào)用參數(shù)不一致等問(wèn)題都能發(fā)現(xiàn)出來(lái)。后面這一點(diǎn)特性對(duì)得物業(yè)務(wù)來(lái)說(shuō)是十分需要的功能,能夠檢測(cè)出一些潛在的風(fēng)險(xiǎn)。例如某個(gè)接口里面有一次數(shù)據(jù)庫(kù)調(diào)用進(jìn)行轉(zhuǎn)賬,某次迭代業(yè)務(wù)開(kāi)發(fā)引入了bug造成兩次數(shù)據(jù)庫(kù)調(diào)用操作進(jìn)行了兩次轉(zhuǎn)賬,而入口的返回?cái)?shù)據(jù)還是跟原來(lái)一致。這個(gè)例子中,如果業(yè)務(wù)冪等沒(méi)做好極可能造成資損。這類問(wèn)題可以通過(guò)jvm sandbox repeater發(fā)現(xiàn)出來(lái)。

          jvm sandbox repeater跟其他錄制回放方案相比,最大的局限性在于只支持java程序。得物當(dāng)前的后端服務(wù)是以java為主,因此這一點(diǎn)對(duì)我們來(lái)說(shuō)不是一個(gè)阻礙點(diǎn)。

          綜上所述,我們最終選擇了以阿里開(kāi)源的jvm sandbox repeater為基礎(chǔ),進(jìn)行得物流量錄制回放平臺(tái)的建設(shè)。

          5. 技術(shù)架構(gòu)

          結(jié)合得物的實(shí)際情況,我們目前的技術(shù)架構(gòu)如下圖所示:

          • 沙箱&repeater module版本更新:通過(guò)oss發(fā)布

          • 管控面后臺(tái):springboot程序,承載錄制回放平臺(tái)核心功能

          • 錄制流量存儲(chǔ):寫入ES

          • 錄制環(huán)境:通常在生產(chǎn)環(huán)境錄制,其他環(huán)境也支持錄制

          • 回放環(huán)境:得物專門構(gòu)建了一個(gè)容器環(huán)境用于流量回放。目的是為了解決業(yè)務(wù)配置在錄制和回放時(shí)不一致導(dǎo)致失敗噪音的問(wèn)題(得物大部分業(yè)務(wù)配置是通過(guò)中間件ark實(shí)現(xiàn),ark是得物的配置中心)。當(dāng)前暫時(shí)由測(cè)試同學(xué)進(jìn)行業(yè)務(wù)配置一致性check,后續(xù)平臺(tái)會(huì)提供自動(dòng)check功能

          6. 技術(shù)挑戰(zhàn)

          我們?cè)谄脚_(tái)建設(shè)中也遇到了技術(shù)上的挑戰(zhàn),下面列舉了部分我們?cè)谄脚_(tái)建設(shè)中踩過(guò)的坑和我們想到的解法。包括我們目前還沒(méi)有很好解決的挑戰(zhàn)性問(wèn)題。

          6.1 開(kāi)源版本bug修復(fù)

          在平臺(tái)建設(shè)過(guò)程中,我們發(fā)現(xiàn)開(kāi)源的的jvm sandbox存在一些bug。對(duì)于這些問(wèn)題,我們?cè)谑褂眠^(guò)程中進(jìn)行了修復(fù)。這里僅舉兩個(gè)例子。

          1. 錄制采樣率不均衡

          開(kāi)源版本的采樣率算法不均衡,會(huì)造成一段時(shí)間內(nèi)流量都采集,一段時(shí)間都采集不到的情況。跟我們的預(yù)期不符。因此我們?cè)谑褂眠^(guò)程中修改了采樣率算法,使得每筆流量是否錄制是否采樣的判斷邏輯都符合我們?cè)O(shè)置的采樣概率。

          1. java入口插件JavaEntrancePlugin bug導(dǎo)致java入口的配置動(dòng)態(tài)變更時(shí)無(wú)法rewatch
          @Override?
          ?public?void?onConfigChange(RepeaterConfig?config)?throws?PluginLifeCycleException?{?
          ?if?(configTemporary?==?null)?{?
          ???super.onConfigChange(config);?
          }?else?{?
          ?this.config?=?config;
          ?super.onConfigChange(config);
          ?List?current?=?config.getJavaEntranceBehaviors();?
          ?List?latest?=?configTemporary.getJavaEntranceBehaviors();?
          if?(JavaPluginUtils.hasDifference(current,?latest))?{?
          ?reWatch0();?
          ?}?
          ?}?
          ?}

          上述第6-7行部分代碼位置應(yīng)該移動(dòng)到第10行代碼上方,否則無(wú)法在運(yùn)行時(shí)重新監(jiān)聽(tīng)配置變化。

          6.2 開(kāi)源版本插件擴(kuò)展

          開(kāi)源的jvm sandbox repeater提供了最基礎(chǔ)的一些插件能力支持。但是在得物業(yè)務(wù)應(yīng)用上使用后我們發(fā)現(xiàn)尚有很多能力缺失。因此我們梳理了得物當(dāng)前需要的插件能力,按使用率排了優(yōu)先級(jí)進(jìn)行了插件能力的擴(kuò)展,讓更多得物應(yīng)用可以使用這套方案進(jìn)行回歸。下圖得物當(dāng)前未支持的插件能力,我們也計(jì)劃在未來(lái)一到兩個(gè)月內(nèi)補(bǔ)齊。

          注:下圖部分插件能力開(kāi)源版本只支持部分功能,例如mq入口不支持,dubbo只支持錄制,回放不支持, http只支持入口不支持子調(diào)用,等等。部分支持的圖中均設(shè)置為N。

          6.3 支持入口獨(dú)立采樣率

          得物的一些服務(wù)接口,調(diào)用頻率會(huì)比較低。而這個(gè)服務(wù)的其他接口調(diào)用頻率很高。這種情況下,開(kāi)源版本的統(tǒng)一采樣率就滿足不了我們需求了,因此我們對(duì)采樣邏輯進(jìn)行了改造,用戶在管控面上可以為每個(gè)接口單獨(dú)設(shè)置采樣率。這樣就可以單獨(dú)為調(diào)用頻率低的接口設(shè)置百分百采樣。

          6.4 用例-場(chǎng)景分類標(biāo)簽化

          在平臺(tái)第一版上線后,用戶反饋篩選流量比較耗時(shí)。因此我們?cè)O(shè)計(jì)了流量打標(biāo)的功能,用戶可以設(shè)置流量打標(biāo)規(guī)則,如果錄制的流量符合設(shè)置的規(guī)則,就會(huì)打上一個(gè)標(biāo)簽。在篩選的時(shí)候可以按標(biāo)簽過(guò)濾,進(jìn)行用例的篩選和沉淀。

          如下圖所示,用戶可以根據(jù)入口調(diào)用的請(qǐng)求,響應(yīng),也可以根據(jù)子調(diào)用的請(qǐng)求,設(shè)置打標(biāo)規(guī)則。當(dāng)前,這部分的打標(biāo)規(guī)則創(chuàng)建目前還是靠人工完成,并且依賴用戶對(duì)業(yè)務(wù)的理解經(jīng)驗(yàn),還是半自動(dòng)化的。后續(xù)我們希望通過(guò)一些大數(shù)據(jù)分析,特征提取,聚類算法,進(jìn)行全自動(dòng)打標(biāo)的嘗試,希望能進(jìn)一步降低用戶在這塊工作上的投入成本。

          6.5 新用例自動(dòng)沉淀

          在真正實(shí)現(xiàn)全自動(dòng)化用例沉淀之前,我們同時(shí)也在思考能否用一些自動(dòng)化功能替換部分用戶人工篩選流量沉淀用例的操作。我們?cè)O(shè)計(jì)了一個(gè)自動(dòng)沉淀的功能。用戶在設(shè)置打標(biāo)規(guī)則后,可以指定希望沉淀的標(biāo)簽和希望沉淀的用例集。平臺(tái)檢測(cè)到符合條件的一條流量后就會(huì)作為用例自動(dòng)放入指定用例集中沉淀下來(lái)。

          6.6 回放失敗排查提效

          回放失敗排查提效是一個(gè)流量回放最難解決的問(wèn)題。一方面因?yàn)樵鎟epeater上報(bào)的信息不夠豐富,很多情況需要看日志才能排查,另一方面目前業(yè)界也沒(méi)有比較好的,公開(kāi)的方法論。我們對(duì)此進(jìn)行了一些初步的探索。當(dāng)前我們的方法可以一定程度上提效。當(dāng)然,后面還需要結(jié)合實(shí)際使用情況進(jìn)行持續(xù)地探索。

          我們對(duì)回放失敗的場(chǎng)景自動(dòng)進(jìn)行了以下分類,幫助排查人員聚焦定位問(wèn)題,同時(shí)通過(guò)上報(bào)更豐富的數(shù)據(jù)信息提供排查指引。下表從上往下按優(yōu)先級(jí)從高到低排列。界面展示以優(yōu)先級(jí)高的為準(zhǔn),避免冗余無(wú)效信息干擾排查。

          6.7 失效用例替換提效

          根據(jù)我們一段時(shí)間的實(shí)際使用,我們發(fā)現(xiàn)在回放失敗的用例中,有很大一部分是因?yàn)闃I(yè)務(wù)代碼正常變更導(dǎo)致。這類問(wèn)題導(dǎo)致的回放失敗是正常現(xiàn)象,我們會(huì)認(rèn)為這個(gè)用例失效需要等發(fā)版后重新錄制。其相關(guān)的業(yè)務(wù)代碼邏輯應(yīng)當(dāng)由本次迭代的新功能的測(cè)試用例覆蓋。

          對(duì)于這些失效的流量回放用例,一開(kāi)始我們是通過(guò)業(yè)務(wù)測(cè)試進(jìn)行人工替換的。但是我們發(fā)現(xiàn)這部分工作量比較大。因此我們開(kāi)發(fā)了自動(dòng)化替換功能。業(yè)務(wù)測(cè)試只需要指定需要自動(dòng)替換的用例,后續(xù)工作都可以通過(guò)平臺(tái)自動(dòng)完成。

          6.8 只讀接口預(yù)發(fā)/灰度不mock回放

          因?yàn)樵诘梦镱A(yù)發(fā)/灰度環(huán)境是聯(lián)通生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)和下游應(yīng)用,因此對(duì)于預(yù)發(fā)進(jìn)行不mock的回放,特別是對(duì)只讀接口進(jìn)行不mock的回放能夠在上線前的最后階段進(jìn)行一次兜底的回歸校驗(yàn)。但是這個(gè)方案存在一定的風(fēng)險(xiǎn)。最難解決的問(wèn)題是,當(dāng)前是只讀的接口難以保證后續(xù)的變更不會(huì)引入寫操作。在當(dāng)前階段開(kāi)放這一功能會(huì)引入額外的資損類風(fēng)險(xiǎn)敞口。對(duì)此問(wèn)題,每次回放前都進(jìn)行人工校驗(yàn)可能可以解決,但是又引入了極大的效率問(wèn)題。如何高效地保證在預(yù)發(fā)/灰度環(huán)境進(jìn)行不mock流量回放不會(huì)產(chǎn)生資損風(fēng)險(xiǎn),是一個(gè)難度頗高的問(wèn)題。當(dāng)前得物在這一領(lǐng)域還處于探索階段,有一些初步的想法,但是距離真正落地還有一段距離。

          7、總結(jié)

          流量錄制回放作為測(cè)試領(lǐng)域的一個(gè)新生事物,在誕生初期就吸引了廣大測(cè)試同仁的關(guān)注,各個(gè)公司也對(duì)此進(jìn)行了一些實(shí)踐。得物對(duì)流量錄制回放的實(shí)踐還屬于比較初期的階段,一些問(wèn)題的解法也在探索中 (例如如何在預(yù)發(fā)/灰度回放而不引入資損)。但是通過(guò)一段時(shí)間的滾動(dòng)運(yùn)行,目前已經(jīng)看到了一些流量錄制回放在業(yè)務(wù)迭代中產(chǎn)生了價(jià)值,發(fā)現(xiàn)了一些隱藏bug。期望我們能在不斷的實(shí)踐中把得物的流量錄制回放體系建設(shè)得越來(lái)越完善,產(chǎn)生更多的業(yè)務(wù)價(jià)值。

          本文來(lái)源自:得到技術(shù)分享


          以上分享希望對(duì)你有所幫助或者啟發(fā),有被幫助到的朋友歡迎點(diǎn)贊在看、轉(zhuǎn)發(fā)

          推薦閱讀:

          1. 重磅消息 | 2021年最新全棧測(cè)試開(kāi)發(fā)技能實(shí)戰(zhàn)指南(第2期)

          2. 低代碼開(kāi)發(fā),推薦一款Web 端自動(dòng)化神器:Automa!

          3. 史上最全測(cè)試開(kāi)發(fā)工具推薦(含自動(dòng)化、APP性能、穩(wěn)定性、抓包神器)

          4. 測(cè)試開(kāi)發(fā):聊一聊自動(dòng)化測(cè)試框架,值得收藏!

          5. 接口測(cè)試常用工具及測(cè)試方法(新手篇)

          6. 全網(wǎng)最全的Postman接口自動(dòng)化測(cè)試!(菜鳥級(jí)攻略)


          END

          所有原創(chuàng)文章
          第一時(shí)間發(fā)布至此公眾號(hào)「測(cè)試開(kāi)發(fā)技術(shù)」

          長(zhǎng)按二維碼/微信掃碼? 添加作者


          閱讀原文

          瀏覽 694
          點(diǎn)贊
          評(píng)論
          1收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          1收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特黄特色A | 日韩美女性爱 | 黑人大屌孟操日本女人 | 国产精品久久久 | 狠狠人妻久久久久久综合 |