您的位置:首頁>科技>正文

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

2)用例執行

動態指向不同的測試環境

執行環境相互隔離

列出執行結果中的關鍵資訊

給出校驗結果

3)用例集

任意用例組合成一個集合

執行時可以指定執行器

支持單次執行和併發執行

動態的顯示執行結果

7 技術改進

point1:用例併發執行

用例併發執行的原理是將任務推送到broker,然後通過啟動多個消費者worker來併發的消費任務,從而達到併發流量的目的。但是這樣會帶來一個問題,當多個用戶同時在平臺上面提交了併發執行任務後,由於任務沒有區分優先順序,導致有些用戶的請求必須等到前面的任務執行完了才能得到回應,用戶體驗很不好。解決的方案就是讓消費者worker有區別的去消費不同的任務,例如user1的任務,只讓worker1來消費,其他的worker不會消費,這樣就達到了用戶併發任務都能達到及時回應。

下圖給展示了任務併發的架構改進:

point2:協議的設計演進

剛開始,調度器和執行器之間是基於http請求的,但是發現http請求對資源的消耗比較大,而且隨著執行器不斷的增加,對調度器而言開銷會越來越大,性能會急劇下降。現在將協議改成socket,調度器和執行器之間維護長連接,這樣減少了http創建連接的開銷。任務通過msgpack下發,消息體裡面定義任務的類型。

point3:執行器管理

上面提到執行器是通過docker實現的,這樣做的好處有:

通過docker來實現網路隔離

swarm做調度,shipyard做視覺化的集群管理

可以動態的擴展資源,接入成本更低

網易企業服務-企業資訊化服務提供者

湖南領先網路科技有限公司163.hn.cn

Next Article
喜欢就按个赞吧!!!
点击关闭提示