qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          分布式測試執行

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

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石阡县| 齐河县| 班玛县| 奈曼旗| 龙口市| 阿坝| 潍坊市| 鸡东县| 铅山县| 文昌市| 华阴市| 新河县| 安庆市| 宝山区| 康定县| 昌宁县| 交城县| 东海县| 哈巴河县| 汾阳市| 尼玛县| 凭祥市| 唐河县| 蕲春县| 康平县| 嘉义市| 沂源县| 绥芬河市| 克拉玛依市| 响水县| 三台县| 磐石市| 平塘县| 五常市| 济南市| 洛浦县| 吐鲁番市| 红安县| 开封市| 昭苏县| 高邑县|