Docker技術的測試應用——介面測試平臺
HTTP介面測試是大家接觸較多的一種測試類型,也是做自動化驗證、快速回歸的重要手段。本文主要講解,如何巧用Docker的天然優勢,構建一個擴展性強的介面測試平臺,以及構建平臺過程中遇到的技術細節。
1 介面測試基本流程
介面測試的基本流程是這樣的:根據介面規範文檔,構造請求參數(正面的、反面的、邊界值等),然後發送http請求到服務端,服務端處理完返回對應的資料,然後驗證返回值是否符合預期。整個流程如下圖所示:
2 常見介面測試工具
下圖對比了一些常見的介面測試工具:
3 理想中的介面測試平臺需要具備哪些功能
作為一個點點點工程師,希望介面測試可以通過點點滑鼠就可以輕鬆完成一次介面測試,上面的那些工具雖然各有優勢,但是用起來並不那麼輕鬆。
下面列出各種理想中介面測試是怎樣的:
1)視覺化的編輯http請求
2)無縫接入持續集成
3)方便的準備測試資料
4)靈活的圈定用例集
5)用例可複製共用協作
6)支持定時任務
7)支援場景化的測試
8)用例可以快速的在不同環境中執行
9)支持併發執行
10)直觀看到測試過程中的各種資料
4 介面測試平臺功能分析
基於上面的需求,我們開發了一個定制化的介面測試平臺,外觀如下圖所示:
核心功能是用例創建、執行、管理,下圖是產品架構圖:
5 平臺的架構
下圖是介面測試平臺主要的架構:
從架構圖中可以看到,主要的核心服務有三個:
1)web服務,主要負責用例、環境等的管理
2)調度器,負責下發任務、資料轉發等
3)執行器,是輕量的Docker容器,是具體用例的執行就是在執行器裡面操作的
6 具體的功能介紹
1)用例創建:
用例五元組: URL、請求類型、用例名、請求頭、請求參數
用例參數獲取方式: 固定值、外部獲取、系統生成、其他用例
校驗方式支援:json校驗、請求包含、請求不包含、規則運算式、httpcode
支援單用例多組資料
支援用例複製、重新編輯
執行記錄有保存
2)用例執行
動態指向不同的測試環境
執行環境相互隔離
列出執行結果中的關鍵資訊
給出校驗結果
3)用例集
任意用例組合成一個集合
執行時可以指定執行器
支持單次執行和併發執行
動態的顯示執行結果
7 技術改進
point1:用例併發執行
用例併發執行的原理是將任務推送到broker,然後通過啟動多個消費者worker來併發的消費任務,從而達到併發流量的目的。但是這樣會帶來一個問題,當多個用戶同時在平臺上面提交了併發執行任務後,由於任務沒有區分優先順序,導致有些用戶的請求必須等到前面的任務執行完了才能得到回應,用戶體驗很不好。解決的方案就是讓消費者worker有區別的去消費不同的任務,例如user1的任務,只讓worker1來消費,其他的worker不會消費,這樣就達到了用戶併發任務都能達到及時回應。
下圖給展示了任務併發的架構改進:
point2:協議的設計演進
剛開始,調度器和執行器之間是基於http請求的,但是發現http請求對資源的消耗比較大,而且隨著執行器不斷的增加,對調度器而言開銷會越來越大,性能會急劇下降。現在將協議改成socket,調度器和執行器之間維護長連接,這樣減少了http創建連接的開銷。任務通過msgpack下發,消息體裡面定義任務的類型。
point3:執行器管理
上面提到執行器是通過docker實現的,這樣做的好處有:
通過docker來實現網路隔離
swarm做調度,shipyard做視覺化的集群管理
可以動態的擴展資源,接入成本更低
網易企業服務-企業資訊化服務提供者
湖南領先網路科技有限公司163.hn.cn
給出校驗結果
3)用例集
任意用例組合成一個集合
執行時可以指定執行器
支持單次執行和併發執行
動態的顯示執行結果
7 技術改進
point1:用例併發執行
用例併發執行的原理是將任務推送到broker,然後通過啟動多個消費者worker來併發的消費任務,從而達到併發流量的目的。但是這樣會帶來一個問題,當多個用戶同時在平臺上面提交了併發執行任務後,由於任務沒有區分優先順序,導致有些用戶的請求必須等到前面的任務執行完了才能得到回應,用戶體驗很不好。解決的方案就是讓消費者worker有區別的去消費不同的任務,例如user1的任務,只讓worker1來消費,其他的worker不會消費,這樣就達到了用戶併發任務都能達到及時回應。
下圖給展示了任務併發的架構改進:
point2:協議的設計演進
剛開始,調度器和執行器之間是基於http請求的,但是發現http請求對資源的消耗比較大,而且隨著執行器不斷的增加,對調度器而言開銷會越來越大,性能會急劇下降。現在將協議改成socket,調度器和執行器之間維護長連接,這樣減少了http創建連接的開銷。任務通過msgpack下發,消息體裡面定義任務的類型。
point3:執行器管理
上面提到執行器是通過docker實現的,這樣做的好處有:
通過docker來實現網路隔離
swarm做調度,shipyard做視覺化的集群管理
可以動態的擴展資源,接入成本更低
網易企業服務-企業資訊化服務提供者
湖南領先網路科技有限公司163.hn.cn