<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>

          持續(xù)演進(jìn)的接口自動(dòng)化測(cè)試方案

          共 3470字,需瀏覽 7分鐘

           ·

          2020-10-16 21:49




          作者:Henry

          部門:美業(yè)測(cè)試


          前言

          接口自動(dòng)化測(cè)試是個(gè)老生常談的話題,基本上每個(gè)測(cè)試團(tuán)隊(duì)都會(huì)涉及,市面上大部分文章會(huì)從如何設(shè)計(jì)框架去講解。但是這一次我想回歸自動(dòng)化的根本價(jià)值,從持續(xù)演進(jìn)的解決方案出發(fā),講解有贊測(cè)試團(tuán)隊(duì)的心路歷程和對(duì)于接口自動(dòng)化的理解,歡迎交流。

          一、價(jià)值

          有贊測(cè)試團(tuán)隊(duì)肩負(fù)的一個(gè)使命是:打造高效且可靠的產(chǎn)品交付能力。為了完成這個(gè)使命,我們會(huì)借助各種工具,而接口自動(dòng)化就是其中的一把利器。

          如何讓接口自動(dòng)化的價(jià)值最大化,首先需要想清楚如何去評(píng)估接口自動(dòng)化的質(zhì)量,有贊測(cè)試團(tuán)隊(duì)是這樣思考的:

          1. 最大化提升回歸測(cè)試的效率

          2. 消滅更多的測(cè)試盲點(diǎn)

          接下來(lái)介紹的持續(xù)演進(jìn)的方案都是基于這兩個(gè)方向去努力的

          二、業(yè)務(wù)服務(wù)器架構(gòu)

          為了讓大家更好地理解我們的演進(jìn)思路,我先簡(jiǎn)單介紹一下我們業(yè)務(wù)的服務(wù)器架構(gòu),接口自動(dòng)化的測(cè)試目標(biāo)。

          客戶端:渠道較多,分Web、H5、小程序、APP、Pad,通過(guò)youzan.com域名請(qǐng)求,統(tǒng)一接入到公司網(wǎng)關(guān)層Nginx集群,反向代理轉(zhuǎn)發(fā)到對(duì)應(yīng)業(yè)務(wù)的Web服務(wù)器。

          • Web服務(wù)器:這一層是Nodejs實(shí)現(xiàn),涉及邏輯主要是路由轉(zhuǎn)發(fā)、登陸態(tài)校驗(yàn)。

          • 后端服務(wù)器:電商系通用的Java微服務(wù)架構(gòu),API1和API2是接入層,涉及邏輯主要是請(qǐng)求轉(zhuǎn)發(fā)和非業(yè)務(wù)相關(guān)的通用處理。Service1這一層才是真正的業(yè)務(wù)邏輯層,大概有30多個(gè)微服務(wù)應(yīng)用,互相之間使用dubbo協(xié)議通信。

          所以,接口自動(dòng)化面臨2種選型:

          1. 模擬客戶端進(jìn)行HTTP請(qǐng)求,優(yōu)勢(shì)是能快速覆蓋用戶場(chǎng)景,劣勢(shì)是需要構(gòu)建大量的數(shù)據(jù),后期維護(hù)成本高。

          2. 基于dubbo協(xié)議進(jìn)行請(qǐng)求,優(yōu)勢(shì)是能Mock依賴數(shù)據(jù),劣勢(shì)是前期腳本編寫成本高,且不支持預(yù)發(fā)執(zhí)行。

          該如何選擇呢?小朋友才做選擇題,成年人我們都要了,兩者互相結(jié)合,揚(yáng)長(zhǎng)避短。

          三、如何提升回歸測(cè)試效率

          這里需要從三個(gè)階段來(lái)看:回歸測(cè)試前、回歸測(cè)試中、回歸測(cè)試后。

          回歸測(cè)試前,我們通過(guò)2個(gè)事情來(lái)提升效率:

          1、精準(zhǔn)定位自動(dòng)化測(cè)試覆蓋范圍

          最原始的范圍依據(jù)是根據(jù)功能測(cè)試用例來(lái),但這不是客觀合理的,我們從對(duì)外暴露的接口數(shù)和后端Service層應(yīng)用的代碼覆蓋率去評(píng)估。

          我們基于JaCoCo進(jìn)行二次開(kāi)發(fā)實(shí)現(xiàn)增量代碼覆蓋率統(tǒng)計(jì),可以拿到每次執(zhí)行自動(dòng)化后的指令級(jí)覆蓋(Instructions,C0coverage),分支(Branches,C1coverage)、圈復(fù)雜度(Cyclomatic Complexity)、行覆蓋(Lines)、方法覆蓋(non-abstract methods)、類覆蓋(classes)。通過(guò)這些信息我們可以對(duì)我們的自動(dòng)化進(jìn)行查漏補(bǔ)缺。

          通過(guò)解析前端路由文件,獲取線上正在使用的接口數(shù),作為基準(zhǔn),對(duì)比自動(dòng)化執(zhí)行請(qǐng)求的接口數(shù),可以快速告訴各個(gè)模塊負(fù)責(zé)人覆蓋盲點(diǎn)。

          2、高效編寫自動(dòng)化腳本
          我們需要通過(guò)抓包工具來(lái)獲取請(qǐng)求信息,這里面涉及到請(qǐng)求過(guò)濾、數(shù)據(jù)格式化、拷貝、順序調(diào)用等工作,我們做了一個(gè)Chrome插件來(lái)代替這些大量的重復(fù)性工作,以提升自動(dòng)化編寫效率。
          依下圖所示,先Start開(kāi)始抓包,操作被測(cè)頁(yè)面,Stop停止,列表會(huì)過(guò)濾顯示符合條件的XHR類型請(qǐng)求,請(qǐng)求信息自動(dòng)格式化,支持手動(dòng)單條刪除or拷貝,點(diǎn)擊Copy調(diào)用接口批量上傳到自動(dòng)化測(cè)試平臺(tái),是不是大大簡(jiǎn)化了前期獲取原生數(shù)據(jù)的工作。

          在我們測(cè)試平臺(tái)進(jìn)行用例的二次編輯,全部支持界面化。

          回歸測(cè)試中,只需要關(guān)注一個(gè)事情:執(zhí)行時(shí)間。隨著業(yè)務(wù)不斷壯大,線上接口數(shù)接近2000+,對(duì)應(yīng)的自動(dòng)化接口請(qǐng)求數(shù)10000+,每次全量執(zhí)行時(shí)間需要1個(gè)多小時(shí),這樣的速度是無(wú)法接受的,為了在10分鐘之內(nèi)解決戰(zhàn)斗,我們做了3個(gè)事情:
          1、延遲隊(duì)列
          廢除了Sleep方式,將數(shù)據(jù)有延遲的校驗(yàn)放置到延遲隊(duì)列中,支持自定義在一級(jí)模塊or二級(jí)模塊后再校驗(yàn)。
          2、多級(jí)模塊支持并發(fā)執(zhí)行
          我們采用官方的CompletableFuture異步線程類實(shí)現(xiàn)執(zhí)行邏輯,Executors線程池管理,和業(yè)務(wù)賬號(hào)池關(guān)聯(lián)起來(lái),一個(gè)線程對(duì)應(yīng)一個(gè)執(zhí)行賬號(hào)資源,項(xiàng)目實(shí)際多模塊并發(fā)的代碼如下:

          合理的使用線程池能夠帶來(lái)以下明顯的好處:
          1. 可以自定義指定線程池,例如大小,超時(shí)等等
          2. 降低資源消耗:通過(guò)重用已經(jīng)創(chuàng)建的線程來(lái)降低線程創(chuàng)建和銷毀的消耗
          3、數(shù)據(jù)清理采用命令模式
          1. 每一項(xiàng)測(cè)試數(shù)據(jù)的清理,都是一個(gè)任務(wù)類,所有的任務(wù)類都繼承了一個(gè)抽象類,在action方法里定義了數(shù)據(jù)清理的接口請(qǐng)求
          2. 在每次創(chuàng)建數(shù)據(jù)后,實(shí)例化任務(wù)類,然后添加到隊(duì)列里
          3. 所有測(cè)試用例執(zhí)行完成后,afterTest里遍歷隊(duì)列依次數(shù)據(jù)清理

          采用這個(gè)方式的優(yōu)勢(shì):

          1. 自動(dòng)化測(cè)試任務(wù)中途異常退出結(jié)束了,也可以清理掉已創(chuàng)建的數(shù)據(jù)

          2. 支持多份的同樣數(shù)據(jù)清理,數(shù)據(jù)之間不受影響

          3. 無(wú)需用完立刻刪除,統(tǒng)一清理,且支持并發(fā),高效

          回歸測(cè)試完成后,當(dāng)然要去分析結(jié)果了。一個(gè)信息全面,交互良好的測(cè)試報(bào)告可以讓自動(dòng)化結(jié)果分析效率大大提高。

          四、消滅更多的測(cè)試盲點(diǎn)

          有贊測(cè)試團(tuán)隊(duì)會(huì)定期分析線上漏測(cè)BUG,從后端BUG的分析結(jié)果來(lái)看,主要原因集中在偶現(xiàn)的數(shù)據(jù)不一致和復(fù)雜用戶場(chǎng)景覆蓋兩個(gè)方面,反映出組裝接口請(qǐng)求進(jìn)行自動(dòng)化測(cè)試覆蓋的局限性。如何消滅這2個(gè)盲點(diǎn),成為了我們演進(jìn)的一個(gè)方向,我們將接口自動(dòng)化測(cè)試場(chǎng)景轉(zhuǎn)戰(zhàn)到生產(chǎn)環(huán)境。
          1、線上業(yè)務(wù)自動(dòng)化校驗(yàn)
          在公司越來(lái)越復(fù)雜的分布式架構(gòu)下,難免會(huì)出現(xiàn)遠(yuǎn)程調(diào)用失敗,消息發(fā)送失敗,并發(fā)bug等問(wèn)題,最終會(huì)導(dǎo)致系統(tǒng)間的數(shù)據(jù)不一致。傳統(tǒng)的接口請(qǐng)求方式是無(wú)法發(fā)現(xiàn)這類問(wèn)題的,我們需要借助BCP業(yè)務(wù)校驗(yàn)平臺(tái)。

          舉個(gè)實(shí)際BUG場(chǎng)景:買家在有贊商家店鋪購(gòu)買商品參與了滿減送,但是贈(zèng)送的優(yōu)惠券遲遲沒(méi)有送達(dá)。我們來(lái)講講如何覆蓋這個(gè)場(chǎng)景的:
          1. 在對(duì)應(yīng)的后臺(tái)應(yīng)用上找到購(gòu)買商品的Topic A
          2. 在BCP平臺(tái)建立一個(gè)監(jiān)聽(tīng)A廣播消息的Channel B
          3. 消費(fèi)A的廣播消息時(shí)觸發(fā)接口請(qǐng)求,查詢買家的權(quán)益信息,檢查是否對(duì)于的優(yōu)惠券信息
          4. 接口請(qǐng)求回來(lái)的數(shù)據(jù)和A廣播發(fā)出的消息體,作為對(duì)賬規(guī)則的數(shù)據(jù)來(lái)源
          5. 在規(guī)則庫(kù)創(chuàng)建好對(duì)賬規(guī)則,進(jìn)行線上每一筆數(shù)據(jù)的校驗(yàn)
          這樣能做到,用戶購(gòu)買商品產(chǎn)生的每一筆數(shù)據(jù),都會(huì)經(jīng)過(guò)我們自動(dòng)化校驗(yàn),確保每一筆數(shù)據(jù)的一致性,偶現(xiàn)的BUG是不是無(wú)處遁形
          2、流量錄制回放
          前面提到的傳統(tǒng)接口自動(dòng)化解決方案,無(wú)論優(yōu)化到什么程度,對(duì)于用戶場(chǎng)景覆蓋和效率提升,都是有一定的局限性的。
          所以,為了不斷演進(jìn)我們需要引入新方案,有贊測(cè)試團(tuán)隊(duì)引進(jìn)的流量錄制回放,基于阿里開(kāi)源的JVM AOP的能力,通過(guò)對(duì)被測(cè)應(yīng)用進(jìn)行掛載Sandbox,進(jìn)行字節(jié)碼注入,從而達(dá)到在線上錄制流量和測(cè)試環(huán)境回放流量的目的。

          上圖是有贊流量錄制回放平臺(tái)的架構(gòu)圖,一次完整的流量錄制回放是這樣的:
          1. Agent包括阿里開(kāi)源的Sandbox和我們開(kāi)發(fā)的插件,插件里實(shí)現(xiàn)了流量抓取、保存和回放的邏輯。以Java Agent的方式掛載到生產(chǎn)環(huán)境的機(jī)器,就可以開(kāi)始采集流量了
          2. 一次流量錄制包括一次入口調(diào)用和若干次子調(diào)用(Dubbo、NSQ、MyBatis、Redis、HBase),通過(guò)traceid將入口調(diào)用和子調(diào)用綁定成一次完整的記錄,監(jiān)聽(tīng)BEFORE、RETRUN、THROW事件機(jī)制獲取每次調(diào)用的傳參和返回
          3. 每一個(gè)完整流量的traceid和調(diào)用鏈路,會(huì)生成一個(gè)MD5值,判斷是否有重復(fù),若有,測(cè)試用例熱度+1,若無(wú),創(chuàng)建新的測(cè)試用例保存
          4. 測(cè)試環(huán)境部署被測(cè)代碼,也掛載上Agent,創(chuàng)建任務(wù)執(zhí)行線上流量保存下來(lái)的測(cè)試用例,支持Mock dubbo consumer和中間件調(diào)用
          5. 執(zhí)行返回的response和線上采集的進(jìn)行Json diff,分析差異化判斷是否是BUG。下圖是我們項(xiàng)目實(shí)際的使用流程:

          由此看來(lái),對(duì)比傳統(tǒng)接口自動(dòng)化,流量錄制回放有如下優(yōu)勢(shì):
          1. 線上流量采集,還原真實(shí)用戶場(chǎng)景,覆蓋率高

          2. 自動(dòng)分析生成測(cè)試用例,省去手動(dòng)編寫和后期維護(hù)工作,大大提升效率

          3. 支持自定義Mock,將后端服務(wù)隔離,進(jìn)行模塊化測(cè)試,代替單元測(cè)試的完美方案

          以上拙見(jiàn),希望能起到拋磚引玉的作用,歡迎各位測(cè)試同仁一起來(lái)交流分享。

          Vol.341




          最后打個(gè)小廣告

          有贊測(cè)試團(tuán)隊(duì)持續(xù)招人中,大量崗位空缺

          只要你來(lái),就能幫你點(diǎn)亮全棧開(kāi)發(fā)技能樹(shù)

          我們期待你的加入~


          如果你也是聰明、皮實(shí)、有要性的小伙伴

          如果你對(duì)零售、SaaS有更多想法


          歡迎投遞簡(jiǎn)歷:[email protected]

          加入我們,一起enjoy





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

          手機(jī)掃一掃分享

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

          手機(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>
                  韩国一区视频在线观看 | 操逼免费在线视频 | 中日韩操逼视频 | 色伊人大香蕉 | 俺去也俺就去www色情网最新更新内容 |