1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        百度廣告產(chǎn)品系統(tǒng)級測試技術演進

        共 3937字,需瀏覽 8分鐘

         ·

        2021-01-18 13:03

        背景


        根據(jù)典型的測試金字塔結(jié)構,一個產(chǎn)品的測試可分為三個層級。第一層是單元測試,主要對程序函數(shù)進行測試。第二層是集成測試,在百度內(nèi)部是大家常理解的模塊測試。第三層是系統(tǒng)級測試,對產(chǎn)品整體進行的測試。這種測試分層原理同樣遵循二八定律,越往下的層級,往往用較小的測試成本,就能換取較多的功能覆蓋;而越往上的層級,往往會耗用很多的時間,卻發(fā)現(xiàn)很少量的問題,但是一旦有bug出現(xiàn),問題影響面、定位成本,修復成本也是很高的。因此很多新的產(chǎn)品線,在系統(tǒng)級測試上的技術投入,是望而卻步的,往往僅在最終上線前,才在接近線上的真實環(huán)境上做人工驗收測試。



        然而像搜索、廣告這種系統(tǒng)架構非常復雜,質(zhì)量要求又特別高的產(chǎn)品,就比較依賴系統(tǒng)級測試的手段來保證線上的穩(wěn)定性,往往一個系統(tǒng)性能缺陷或異常分支問題,就有可能影響到上百萬的流量或收入損失。因此在很多產(chǎn)品線系統(tǒng)級測試是上線不可缺失的一環(huán)。


        產(chǎn)品創(chuàng)立初期系統(tǒng)比較簡單,系統(tǒng)級測試往往并不會成為測試效率的瓶頸。但隨著系統(tǒng)架構越來越復雜,對于系統(tǒng)級測試技術和自動化水平的要求也是與日俱增的。百度商業(yè)產(chǎn)品的系統(tǒng)級測試技術,有著超過6年的技術積累,期間也是經(jīng)歷了幾次技術的演進。這篇文章就給大家回顧一下,這幾次技術架構演進,團隊是怎么樣根據(jù)產(chǎn)品需求和公司導向不斷變化而一直努力和堅持,把系統(tǒng)級測試技術從0分做到60分,又從60分做到90分的過程的。


        演進歷史


        ▌手工測試時代


        還記得2009年之前系統(tǒng)只有幾個模塊的時候,當時的環(huán)境還是比較簡單的,有兩臺機器就能把整個系統(tǒng)給部署起來,當然那時候的環(huán)境部署也是靠人手工從線上同步的。QA通過apache自帶的ab工具或通過loadrunner模擬http請求,對系統(tǒng)進行發(fā)壓,壓力結(jié)束之后通過手工執(zhí)行一系列stat腳本統(tǒng)計出模塊的各種性能數(shù)據(jù),最后編輯到word文檔里,作為當時的主要一份測試報告內(nèi)容。


        這個時代,沒有太多可講的內(nèi)容,當時百度還是普遍以傳統(tǒng)瀑布開發(fā)流程和手工測試為主,在團隊規(guī)模相對較小以及迭代效率相對很低的情況下,這種測試手段也沒有遇到明顯的瓶頸。


        ▌自動化腳本時代


        2009年開始百度QA內(nèi)部開始大力發(fā)展自動化。當時很容易想到了,系統(tǒng)級測試改進的第一站就是如何將重復的,手工執(zhí)行的工作用腳本給自動化起來。因此有了后面的一鍵自動部署環(huán)境,一鍵自動發(fā)壓,以及自動生成報告等功能。相比手工測試,效率上的確有了一個質(zhì)的飛躍。


        但同時也發(fā)現(xiàn)像環(huán)境搭建、壓力、性能、diff等測試各種工具推出來之后,工程師學習使用和配置這些工具的成本變得很大。工具之間也有很多重復性的邏輯,比如所有工具都需要考慮模塊啟停控制,日志分析等功能。另外,當有項目并行時,機器協(xié)調(diào)及溝通成本就變得越來越大。


        ▌自動化平臺時代


        為解決自動化腳本泛濫之后帶來的技術冗余以及測試過程管理等問題,團隊從2011年開始考慮建設業(yè)務線自有的系統(tǒng)級測試平臺。


        平臺設計成測試平臺、環(huán)境、任務三層管理模式。測試平臺是一批資源的集合,該資源可以用于部署不同場景的測試環(huán)境,每個環(huán)境上可以串行的運行多個測試任務。平臺通過合理的調(diào)度,使得多人使用的時候,資源可以互斥。另外,通過可視化的配置管理,使得底層工具對用戶透明,用戶僅需要關注環(huán)境需求和測試場景需求本身。



        為解決工具泛濫的難題,首先從工具層面定義了統(tǒng)一的接口規(guī)范,以及所有工具放到統(tǒng)一的框架中進行開發(fā)。通過將環(huán)境工具以及各種系統(tǒng)測試工具底層抽取了公共的lib以及環(huán)境操作lib,使得各個工具之間重復的功能得到了有效控制。另外各個工具對平臺暴露統(tǒng)一的接口,使得平臺在調(diào)度不同的工具的時候,都能用統(tǒng)一的邏輯。



        為解決系統(tǒng)架構日益膨脹之后帶來的資源成本的難題,平臺引入環(huán)境解耦技術,將產(chǎn)品拆解成多個子系統(tǒng),通過驅(qū)動和樁模擬系統(tǒng)上下游服務,使得每個子系統(tǒng)都能獨立的進行測試,通過流量錄制和回放技術,使得測試效果接近真實系統(tǒng)。從這個方案中大家也能看到,系統(tǒng)拆分不是很靈活,且不同的拆分方案下,需要定制不同的下游樁來做定制回放,整套方案的管理成本也是不小的,這個也為后面可定制子系統(tǒng)的發(fā)展打下了很好的基礎。



        產(chǎn)品的系統(tǒng)級測試由此進入到工業(yè)時代。整個團隊的測試模式和工具研發(fā)模式也因此平臺的誕生而變得更加規(guī)范、統(tǒng)一。


        ▌測試云時代


        產(chǎn)品線從2011年開始推行持續(xù)集成研發(fā)模式轉(zhuǎn)型。在持續(xù)集成能力建設初期,也感受到了此前積累的測試自動化在此過程中發(fā)揮了更大的價值。但同時也發(fā)現(xiàn),持續(xù)集成使得系統(tǒng)級測試的需求變得更加頻繁,為了保證主干的穩(wěn)定性,甚至想嘗試把系統(tǒng)級測試前置到開發(fā)階段來執(zhí)行,這樣對于系統(tǒng)級測試資源和執(zhí)行效率的要求也變得越來越高。


        考慮到平臺對于資源管理的方案,還是一個個獨立的私有集群,由于集群之間用戶、環(huán)境和任務分布不均與,帶來很大的資源浪費以及任務排隊等問題。隨著業(yè)界Cloud技術的發(fā)展,也給系統(tǒng)級測試技術優(yōu)化帶來了新的思路。通過將資源整合和模塊混布,使得相同資源的情況下,任務的吞吐量得到了一個很好的提升。另外多個用戶共同競爭剩余資源,整體的任務排隊時間也有了一個很好的控制。為減小資源靈活分配帶來的環(huán)境數(shù)據(jù)遷移的成本,引入hdfs/nfs做中間數(shù)據(jù)緩存,通過增量存儲技術,使得環(huán)境數(shù)據(jù)可以進行快速的快照和鏡像恢復。


        同時,為了進一步縮減測試成本,希望系統(tǒng)可以解耦到任意組合。在此前子系統(tǒng)解耦的方案的基礎上,也進行了重構。


        • 錄制環(huán)境從線下搭建的環(huán)境遷移到了線上旁路,模塊的更新更加及時,截取的數(shù)據(jù)更加真實實時,線下仿真效果更好。


        • 通過nb(百度內(nèi)部使用的通用截包工具)+redis做數(shù)據(jù)回放服務,免去了此前stub的數(shù)據(jù)管理和部署成本。


        • 系統(tǒng)可以任意定制,缺失的下游通過回放服務來補充數(shù)據(jù),數(shù)據(jù)覆蓋和測試效果可以和全系統(tǒng)下的表現(xiàn)相當。



        這套方案在很長一段時間內(nèi)支撐著鳳巢檢索系統(tǒng)從數(shù)10個模塊發(fā)展到上百個模塊,幾百人研發(fā)團隊的持續(xù)集成工作開展,是幫助鳳巢團隊成為公司第一批CI標桿團隊的重要武器。同時基于業(yè)務線多年精細化的打磨,也為后面平臺化的重構提供了很好的技術保障。


        平臺化時代


        2014年,在公司提出的接口化、平臺化的戰(zhàn)略口號下。平臺也在考慮如何將系統(tǒng)級測試這種技術門檻很高的技術抽象成服務,從而在其他產(chǎn)品線得到更廣泛的使用和推廣。因此平臺進行了一次整體的重構,旨在通過提供一套通用的建模工具和測試組件,使得產(chǎn)品線構建系統(tǒng)級測試能力可以像搭積木一樣簡單、靈活。



        平臺提供兩個通用測試組件。一個是環(huán)境搭建組件,可以支持單機、多機部署方式,物理機/虛擬機/容器等多種資源形式,和公司內(nèi)的主流PAAS平臺打通。另一個是系統(tǒng)測試組件,通過一些合理的抽象分層設計和靈活的測試場景描述能力,產(chǎn)品線只需要通過簡單的配置,就能夠支持性能、diff和壓測等不同的系統(tǒng)級測試場景。同時框架支持開發(fā)diy插件,滿足產(chǎn)品線定制化的場景需求。當然產(chǎn)品線也可以自己開發(fā)工具,只需要實現(xiàn)平臺所定義的接口,就可以接入到平臺變成服務。


        平臺提供了一套拓撲建模工具,產(chǎn)品線可以根據(jù)被測系統(tǒng)的部署和測試需求,構建測試拓撲。平臺通過三層結(jié)構來刻畫測試需求,第一層是模塊,產(chǎn)品線可以配置模塊的CPU/MEM/DISK/PORT等需求,以便平臺可以調(diào)度到合適的資源,同時需要模塊設置一些靜態(tài)參數(shù)(如log位置、啟動命令、啟動線程數(shù)等)和自定義參數(shù),使得工具和平臺可以更好的理解模塊的屬性。這里除了被測模塊,測試程序也需要進行定義,如driver/stub。第二層是子系統(tǒng),也可理解是被測模塊的集合,方便用戶理解測試范圍。第三層是拓撲模板,產(chǎn)品線根據(jù)測試場景驅(qū)動,繪制出測試系統(tǒng)的拓撲,可支持模塊分組、多實例,以及支持實例間直連/混連,同時選擇和配置配套的環(huán)境工具和測試工具,就能構建出一個用戶可見的測試服務。


        用戶使用的時候就比較簡單了,只需要選擇拓撲模板,搭建環(huán)境,啟動測試任務,即可由平臺調(diào)度,最終生成測試報告了。通過平臺化重構,使得開發(fā)者更加專注工具的實現(xiàn)邏輯,而不用資源和任務調(diào)度。用戶更加關注測試需求本身,而不用考慮工具和資源細節(jié),最終形成一個良性發(fā)展的平臺生態(tài)。目前平臺已經(jīng)支持公司內(nèi)幾十個產(chǎn)品,每周接近1W次規(guī)模的系統(tǒng)級測試任務執(zhí)行。


        總結(jié)和未來展望


        通過歷史上三次大的系統(tǒng)級測試技術的重構,從業(yè)務線專用做到公司通用,不斷將技術和用戶體驗做到極致,這里有很關鍵的三點信念。


        • 與時俱進:技術的發(fā)展需要適應產(chǎn)品業(yè)務的發(fā)展需要,追求過度設計或者設計不足都會導致項目失敗。


        • 匠人精神:任何技術的成功都不可能一蹴而就,需要一點點做起,并不斷在產(chǎn)品線進行打磨,當技術遇到瓶頸的時候,要敢于尋求突破而不是逃避。


        • 開放心態(tài):通過內(nèi)部開源,擴大技術生態(tài)。沒有任何通用的技術可以解決所有產(chǎn)品線的問題,只有通過開源讓可以讓大家共同參與改進,才能讓產(chǎn)品線不會因為10%的需求不滿足而放棄使用技術。


        平臺離一百分的目標還很遙遠,微服務、容器化技術的迅速發(fā)展,使得系統(tǒng)的環(huán)境部署和測試變得更加復雜,同時也對測試工具和平臺有著更高的標準規(guī)范。線上測試也是系統(tǒng)級測試場景創(chuàng)新的下一站,到時候也會對工具和平臺提出新的要求。只要抱著十年磨一劍的信念,緊跟著公司和業(yè)務發(fā)展的步伐不斷前行,相信系統(tǒng)級測試的技術還會迎來更多的創(chuàng)新和挑戰(zhàn)。



        作者介紹

        董海煒

        百度資深測試工程師,多年從事復雜檢索系統(tǒng)的系統(tǒng)級測試和持續(xù)集成工作,在測試自動化和平臺化方面有著豐富的實踐經(jīng)驗。

        end


        瀏覽 48
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            高清无码不卡在线观看 | 男女无遮挡毛片免费视频网站 | 操中国老女人 | chinese麻豆 | chinamodel私拍大尺度 | 久草中文视频 | 插插插总合网 | 啊啊啊啊高潮 | 日韩精品一区二区三区熟女人妻网站 | 娇妻玩4p被5个男人玩 |