qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          分布式測(cè)試執(zhí)行

            1 相關(guān)說明
            1.1 背景簡(jiǎn)介
            隨著一個(gè)產(chǎn)品的自動(dòng)化工作不斷深入,自動(dòng)化的case積累數(shù)量持續(xù)增長(zhǎng),絕大部分毫無依賴關(guān)系的case由于串行運(yùn)行,測(cè)試執(zhí)行時(shí)間達(dá)到小時(shí)界別,且不易于優(yōu)化。另外,ci運(yùn)行時(shí)所需機(jī)器資源的搶占互斥,運(yùn)行機(jī)器的不穩(wěn)定等問題也逐漸擴(kuò)大。
            Hadoop分布式測(cè)試執(zhí)行方案正是為了解決以上問題而產(chǎn)生,通過分布式執(zhí)行,可以達(dá)到并行運(yùn)行,提高執(zhí)行效率的目的;另外,hadoop提供調(diào)度,重試等機(jī)制功能,可以提供給用戶一個(gè)相對(duì)透明的計(jì)算資源池,減少用戶對(duì)機(jī)器運(yùn)行環(huán)境的依賴。
            1.2 分布式平臺(tái)的選擇
            本方案采用hadoop來作為分布式平臺(tái)。首先是Hadoop是一個(gè)開源項(xiàng)目,有非常好的技術(shù)支持,二就是hadoop有成熟的分布式調(diào)度算法,可以很好的利用每臺(tái)機(jī)器的cpu和內(nèi)存資源,達(dá)到計(jì)算資源最優(yōu)分配,三就是hadoop程序易于編寫,便于維護(hù)。
            1.3 名詞解釋
            :apache基金會(huì)的開源分布式框架。
            Mapreduce :hadoop的計(jì)算模型,由map任務(wù)和reduce任務(wù)組成。
            Jobtracker  :hadoop計(jì)算系統(tǒng)的總控。
            Tasktracker  :hadoop計(jì)算系統(tǒng)的子節(jié)點(diǎn)。
            Slot(槽位) :tasktracker的最小計(jì)算分配單元,一個(gè)槽位可以對(duì)應(yīng)一個(gè)map任務(wù),一個(gè)機(jī)器啟動(dòng)一個(gè)tasktracker,槽位的話按照機(jī)器的cpu核數(shù)來分配,一般是”核數(shù)-1”。
            <2 分布式測(cè)試執(zhí)行方案
            2.1 傳統(tǒng)的單機(jī)測(cè)試執(zhí)行流程
            一般的單機(jī)測(cè)試流程分為5步,如下圖所示:
            1、lib庫安裝。包括測(cè)試框架的lib庫安裝以及基于該測(cè)試框架的產(chǎn)品業(yè)務(wù)層lib。
            2、測(cè)試環(huán)境安裝。主要指被測(cè)對(duì)象的測(cè)試環(huán)境安裝,包括數(shù)據(jù)庫安裝,server端安裝等。
            3、case下載。從svn或者case庫獲取需要執(zhí)行的case。
            4、case運(yùn)行。
            5、發(fā)送報(bào)告。
            單機(jī)測(cè)試執(zhí)行的優(yōu)點(diǎn)在于邏輯簡(jiǎn)單,易于實(shí)現(xiàn),缺點(diǎn)就是case要串行執(zhí)行,無法有效里有機(jī)器的cpu和內(nèi)存資源。舉個(gè)例子,現(xiàn)在有一個(gè)8核16G的測(cè)試機(jī),每個(gè)case的平均cpu使用率為10%,內(nèi)存消耗1G,在這樣的情況,一般可以做到至少6個(gè)case并行化,優(yōu)化效率是不言而喻的。
            2.2 從單機(jī)測(cè)試到分布式測(cè)試執(zhí)行的邏輯
            有了以上的五個(gè)步驟及相關(guān)分析,我們考慮其中可以并行執(zhí)行來進(jìn)行優(yōu)化的就是測(cè)試執(zhí)行這塊了,其他lib庫安裝,測(cè)試環(huán)境安裝等都基本是最小單元,不易切分了。
            所以從單機(jī)到分布式主要是Case執(zhí)行集合的一個(gè)拆分。所以簡(jiǎn)單說,單機(jī)和分布式的區(qū)別就是case輸入集合有變“而已,其他單機(jī)的測(cè)試執(zhí)行過程基本不變。對(duì)于測(cè)試工程師來說,這個(gè)過程是透明的,只是執(zhí)行case的環(huán)境從單機(jī)切換到多機(jī)。
            下圖簡(jiǎn)要的表示了case從單機(jī)到多機(jī)的變化(6位的數(shù)字是caseid)。
            2.3 分布式運(yùn)行邏輯
            這里的邏輯主要是兩塊,一部分是本地部分,一部分是分布式節(jié)點(diǎn)機(jī)器部分。我們將分布式測(cè)試執(zhí)行過程封裝到一個(gè)hadoop job里。
            本地部分:
            1、獲取計(jì)算資源。這里的計(jì)算資源指可用的tasktracker的槽位數(shù),這個(gè)槽位是case切分的分母。
            2、根據(jù)計(jì)算資源生成case列表。有了槽位數(shù),最簡(jiǎn)單的切分算法就是:每節(jié)點(diǎn)case數(shù)=總case數(shù)/槽位數(shù)。
            3、業(yè)務(wù)層自定義操作。例如業(yè)務(wù)層測(cè)試執(zhí)行時(shí)需要的程序或者配置獲取,依賴的大數(shù)據(jù)推送到hdfs等。
            4、配置hadoop的job。包括input,output,執(zhí)行job所需的文件或者tar包等。這里的input就是case列表。
            5、執(zhí)行測(cè)試執(zhí)行job。這個(gè)實(shí)際是個(gè)hadoop job。
            6、發(fā)送報(bào)告。匯總每個(gè)節(jié)點(diǎn)的運(yùn)行結(jié)果,并發(fā)出報(bào)告。
            每個(gè)tasktracker的map任務(wù)輸入是切分后的case列表,通過這種方式將整個(gè)測(cè)試執(zhí)行部分分發(fā)到每個(gè)tasktracker上。
            節(jié)點(diǎn)部分:
            1、準(zhǔn)備case列表。從map的input獲取。
            2、根據(jù)case列表下載case。,這里類似于本地單機(jī)版的case獲取,來源仍然是SVN或者CASE庫。
            3、安裝lib庫。同本地單機(jī)版。
            4、安裝測(cè)試環(huán)境。同本地單機(jī)版。
            5、執(zhí)行case。同本地單機(jī)版。
            6、推送報(bào)告。
            這里hadoop還會(huì)根據(jù)每個(gè)map任務(wù)的返回值,來進(jìn)行重試運(yùn)行的調(diào)度。
            從以上的描述可以看到,在hadoop集群節(jié)點(diǎn)機(jī)器上(tasktracker),測(cè)試執(zhí)行的邏輯和單機(jī)版基本無差別,所以整個(gè)改造的過程也是比較簡(jiǎn)單的
            2.4 分布式測(cè)試集群架構(gòu)設(shè)計(jì)
            整個(gè)分布式測(cè)試執(zhí)行依托于一個(gè)公共的計(jì)算集群,這個(gè)計(jì)算集群由兩部分組成,一部分是hadoop相關(guān)的,包括hadoop的總控,子節(jié)點(diǎn)的tasktracker服務(wù)。另外一部分就是公共環(huán)境,包括測(cè)試框架,公共工具例如valgrind等。前者通過jobtracker來管理,后者通過統(tǒng)一運(yùn)維系統(tǒng)來管理,其功能基本就是公共環(huán)境的安裝和維護(hù)。
            3 收益
            經(jīng)過我們的實(shí)際項(xiàng)目實(shí)踐,這部分的收益主要體現(xiàn)在如下兩點(diǎn):
            1、測(cè)試執(zhí)行時(shí)間大幅優(yōu)化。15臺(tái)機(jī)器的情況,所有原測(cè)試執(zhí)行時(shí)間要1-2小時(shí)的模塊,優(yōu)化到10分鐘以內(nèi)。
            2、機(jī)器資源的節(jié)省。通過公共集群的維護(hù),保證所有機(jī)器cpu滿負(fù)荷運(yùn)作,避免了以往單機(jī)測(cè)試執(zhí)行的cpu浪費(fèi)。
            4 準(zhǔn)入原則及發(fā)展方向
            4.1 分布式改造的準(zhǔn)入原則
            并不是所有的測(cè)試執(zhí)行都可以分布式化,在我們的實(shí)際操作過程中,總結(jié)出以下幾點(diǎn)準(zhǔn)入原則,供參考:
            1、空白機(jī)器可運(yùn)行。通過一個(gè)總控腳本就可以做到依賴環(huán)境準(zhǔn)備,lib庫安裝,測(cè)試case執(zhí)行等。
            2、測(cè)試框架允許case并行。
            3、業(yè)務(wù)層case對(duì)外部不存在固定依賴,例如依賴于某個(gè)寫死的目錄。
            4、業(yè)務(wù)層case依賴的server端口,最好是隨機(jī)的。
            5、不允許業(yè)務(wù)層去操作公共環(huán)境。
            4.2 后續(xù)可能的技術(shù)方向
            1、case按照?qǐng)?zhí)行時(shí)間切分。按照時(shí)間切分來替代按照case數(shù)切分。
            2、從分布式測(cè)試執(zhí)行過渡到云測(cè)試服務(wù)。

          posted on 2014-06-12 13:05 順其自然EVO 閱讀(174) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 平果县| 旬阳县| 郸城县| 淮滨县| 榆中县| 景德镇市| 宜兴市| 汕尾市| 英吉沙县| 宁安市| 威信县| 肇东市| 襄樊市| 巴塘县| 古浪县| 土默特左旗| 平昌县| 城固县| 曲水县| 垦利县| 鹤壁市| 乾安县| 乌兰察布市| 通辽市| 常宁市| 独山县| 新兴县| 辽宁省| 札达县| 唐河县| 南皮县| 田东县| 逊克县| 岑溪市| 图木舒克市| 南漳县| 千阳县| 黄大仙区| 和平区| 麻城市| 乐业县|