科技

利用Python Locust庫基於Robot Framework實現介面效能測試(一)

考慮到文章篇幅過長,計劃分三部分寫完《利用Python Locust庫基於Robot Framework實現介面效能測試》,包含設計策略、框架設計、核心原始碼的分享,本篇主要分享設計策略、框架設計及實際應用效果。

由於公司內測試環境(Linux虛擬機器)系統資源效能指標無法保證,使得業務效能受到影響,進而導致效能測試結果的可靠性較低,因此效能測試大多在實際生產環境上進行。

因此萌生一個想法——如何提高測試環境效能測試結果的可靠性並實現持續構建效能測試?

效能瓶頸的影響因素

效能瓶頸定位從維度上劃分,效能指標主要分為兩大類,分別是業務效能指標系統資源效能指標。

業務效能指標可以直觀地反映被測系統的實際效能狀況,常用的指標項有:

併發使用者數事務吞吐率(TPS/RPS)事務平均響應時間事務成功率系統資源效能指標,主要是反映整個系統環境的硬體資源使用情況,常用的指標包括:

伺服器:CPU利用率、處理器佇列長度、記憶體利用率、磁碟IO狀態、網絡卡頻寬使用情況等。資料庫:資料庫連線數、資料庫讀寫響應時長、資料庫讀寫吞吐量等。網路:網路吞吐量、網路頻寬、網路緩衝池大小。快取(Redis):靜態資源快取命中率、動態資料快取命中率、快取吞吐量等。測試裝置(壓力發生器):CPU利用率、處理器佇列長度、記憶體利用率、記憶體交換頁面數、磁碟IO狀態、網絡卡頻寬使用情況等。

測試環境下測試結果可靠性的探討

在測試環境系統資源效能指標不滿足效能測試條件時,效能的測試結果是難以被認可的。這也是我們在測試環境(linux虛擬機器)下,不做效能測試的原因,只有在生產環境進行實測時,會開展效能測試。

矛盾雙方是可以互相轉換的,假如測試環境的測試結果不是進行效能評估的,而是用來比對的呢?——與上一次該介面在該測試環境下的效能測試結果比較。實現介面的不同版本的橫向比較。理論上,不同版本非重大改動的情況下的介面效能指標是相對穩定的(測試環境資料量等因素已考慮),因此我們利用這一點,進行同一介面在相同測試環境下的不同版本的效能指標比較結果是相對可靠的。

持續性的效能測試探討

隨著版本的迭代,每次迭代是否需要進行介面的效能測試,個人認為是需要的。但由於實際的測試環境、人力投入、測試周期等因素,難以做到持續性的效能測試,大多數在某一個版本或交付版本進行效能測試,再進一步就是線上生產環境的效能監控。

那麼是否有必要構建持續性的效能測試呢,如何構建?是否可以像構建自動化用例那樣,快速的構建介面的效能測試用例呢?使效能測試常態化,抱著這種期望,在前段時間,我使用Python的Locust庫基於Robot Framework做了一次嘗試,實踐效果不錯,隨後也應用到了實際專案當中。

持續性的效能測試設計策略

核心理念

圍繞產品進行持續性的業務效能指標比對,實現效能測試的常態化。

框架定位

該框架適應於對介面進行持續性的效能比對,如比對新舊版本介面的效能指標差異是否保持在合理的範圍內,以便對新舊版本效能差異較大的介面進行更深層的效能測試。

框架構建

技術棧:Python、 Locust、Robot Framework、SqLite

如下圖所示,整體架構目前分為壓力生成關鍵字、負載控制(包含結果採集)關鍵字、結果分析器關鍵字、檔案清除關鍵字四部分。

效能測試整體設計

壓力生成關鍵字

根據效能測試用例模版與介面請求型別、檢查點、請求體等內容構建Locustfile檔案(介面效能測試用例),當前只支援單介面的效能測試:

請求引數說明

host:host地址url:請求urlmethod:請求方式web_reg_find:檢查點parameterization:引數,填寫文字地址預設進行引數化處理。parameter_allocation_update: 引數分配和更新方式min_wait:最小等待時間,預設10msmax_wait:最大等待時間,預設20ms響應返回說明

filename :初始化效能測試指令碼路徑負載控制(包含結果採集)關鍵字

執行介面效能測試用例,獲取效能測試結果,並實現結果入DB資料庫:

請求引數說明

locustfile:locustfile指令碼路徑locust_command:locust命令響應返回說明

result:介面測試結果結果分析關鍵字

獲取效能測試結果根據閾值校驗項,檢測各項結果是否超過歷史平均結果的閾值設定,如果異常則斷言失敗。

請求引數說明

result:介面測試結果threshold_value:比對閾值,預設超過歷史測試結果平均數的20%,則視為異常。search:閾值校驗項,預設關注平均、最大、最小、中位響應時間、rpsresult:介面測試結果threshold_value:比對閥值,預設超過歷史測試結果平均數的20%,則視為異常。search:關注點,預設關注平均、最大、最小、中位響應時間、rps檔案清除關鍵字

刪除臨時檔案,包含Locustfile檔案、執行結果檔案:

請求引數說明

filename:Locustfile路徑考慮到文章篇幅過長可能影響閱讀體驗,關於每個關鍵字的設計及核心原始碼分享我們將在後續文章中分享。

應用效果

場景一 單介面效能測試,無引數化。

我們可以看到通過幾行簡單的配置,就可完成介面的效能測試用例開發。

場景二 單介面效能測試,引數化。

引數化資料存放在parameterfile.txt中。

引數化檔案 parameterfile.txt

測試結果

一般情況,此次測試結果不超過歷史均值的設定閥值,則視為通過,否則異常。

執行結果

若對你有所幫助,歡迎大家評論、留言。

Reference:科技日報

看更多!請加入我們的粉絲團

轉載請附文章網址

不可錯過的話題