使用 Locust 進行 API 負載測試

使用 Locust 進行 API 負載測試

使用 Locust 進行 API 負載測試:介紹

您以前可能遇到過這種情況:您編寫代碼來做某事,例如端點。 您使用 Postman 或 Insomnia 測試您的端點,一切正常。 您將端點傳遞給客戶端開發人員,然後他們使用 API 並部署應用程序。 但是,當用戶使用該應用程序時,API 會失敗。

這可能是一個非常煩人的情況,更不用說對企業來說代價高昂了。 這就是軟件開發人員對軟件系統進行各種測試以確保它們按預期運行的原因。 API 也不例外。 在部署之前,你至少應該做性能測試和安全測試。

性能測試可以分為功能測試和負載測試。 功能測試是您通常使用 Postman 或 Insomnia 的目的。 它們確保您的 API 按您的預期運行。 另一方面,負載測試更關注您的 API 如何在實際使用和峰值負載下執行,這就是本文的主題。 讓我們更詳細地看一下負載測試。

什麼是 API 負載測試?

API 負載測試是開發人員用來模擬端點上的正常和峰值負載的一種測試。 這種測試讓開發人員可以在部署 API 之前評估其在現實世界中的性能。 它幫助他們確定係統的最大運行容量、瓶頸(如果有)和性能下降。 API 負載測試通常通過創建虛擬用戶然後使用它們同時測試 API 的功能來完成。 

API 負載測試測量響應時間、並髮用戶、吞吐率、資源利用率水平、平均故障間隔時間 (MTBF)、平均故障時間 (MTTF) 等指標。 所有這些指標都可用於確定 API 的運行情況。

負載測試的類型

負載測試有多種類型,每種都有其用例。 讓我們來看看其中的一些。

負載測試: 這是負載測試的基本形式。 它用於評估系統(在本例中為 API)在正常負載和預期峰值負載下的性能。

壓力測試: 這用於評估系統在非常重的負載下的性能。 此測試的目的是查看系統是否在故障後恢復,以及恢復需要多長時間。 負載通常緩慢增加,直到超過系統的能力。

尖峰測試: 這有點類似於壓力測試,只是突然施加重負載,而不是慢慢增加。 這種測試代表當您的平均用戶或訪問者數量突然激增,或者當您的系統受到 DDOS 攻擊時會發生什麼。

浸泡測試: 這個測試不同於上面的其他測試。 它使您的系統處於正常負載的 80%(或大約)以下,並使其運行很長時間,比如 12 到 14 小時。 這種測試決定了系統在一段時間內的可靠性。

使用 Locust 對 API 進行負載測試

開發人員可以訪問各種選項來對其 API 進行負載測試。 一些常見的負載測試工具是 Gatling、JMeter 和 Locust。 我們將在本文中重點介紹 Locust。

Locust 是一種基於 Python 的開源負載測試工具,谷歌、微軟和 Riot Games 等頂級公司使用它來測試他們的 API。 在本文中,我們將演示如何對 API 進行負載測試。 

對於本教程,我將使用 Flask 創建一個簡單的 API。 您可以跟著我一起學習,也可以只使用 Node 或您熟悉的任何框架創建您的 API。

資格

Python的3

設置和安裝

首先,您需要在您的 PC 上設置一個虛擬環境,這樣您就不會弄亂您的全局 Python 環境。 為此,請運行以下命令。 請注意,這些命令適用於 Windows 終端。

$ mkdir 項目

$ cd /d 路徑\到\項目

$ python -m venv venv

$ venv\腳本\激活

 

首先,我們創建了一個 項目 目錄。 然後我們將當前目錄更改為 項目. 然後,我們在該目錄中為 Python 創建並激活了一個虛擬環境。 

現在,我們將繼續安裝 長頸瓶(我們將使用它來創建要進行負載測試的端點)和 刺槐 本身。 

 

要安裝 Flask,請運行。 確保你在 項目 您創建虛擬環境的位置。

$ pip 安裝燒瓶

 

要安裝蝗蟲,請運行

$ pip 安裝蝗蟲

 

完成後,鍵入以下命令。 確保你在你的 項目 執行此操作時的目錄。

$ 複製 nul __init__.py

$ mkdir 應用程序

$ 複製 nul app\app.py

$ 複製 nul app\__init__.py

 

此命令創建一些文件,我們將使用這些文件使用 Flask 創建端點。 順便說一句,您也可以使用文件資源管理器創建這些文件。 但這有什麼樂趣呢? 完成後,將以下代碼複製到 應用程序

從燒瓶導入燒瓶,jsonify,請求

app = Flask(__ name__)

汽車模型 = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

平面模型 = [

  { '品牌': '波音', '型號': '747' }

]

 

@app.route('/汽車')

def get_cars():

  返回 jsonify(car_models)

@app.route('/飛機')

def get_planes():

  返回 jsonify(plane_models)

如果__name__ =='__main__':

    應用程序運行(調試=真)  

 

上面的代碼包含一個方法 得到_汽車 用於獲取汽車品牌及其型號的列表,以及 獲取飛機 用於獲取飛機品牌及其型號的列表。 為了對這個端點進行負載測試,我們需要運行 app.py。 為此,請運行以下命令。

$ python 路徑\to\app.py

一旦你運行它,你應該看到這樣的東西:

API 負載測試 1

如果您從終端複製 URL 並輸入 汽車 or 飛機 在 / 之後,您應該能夠在那裡看到數據。 但是,我們的目標是使用 locust 測試端點,而不是使用瀏覽器。 所以讓我們這樣做吧。 在您的根目錄中運行以下命令 項目 目錄。

 

$ 複製 nul locust_test.py

 

這會在您的根目錄中創建一個“locust_test.py”文件 項目 目錄。 完成後,打開文件並粘貼以下代碼。 我們將很快解釋。

 

導入時間

從蝗蟲導入 HttpUser,任務,之間

 

用戶行為類(HttpUser):

    等待時間 = 之間 (5, 10)

 

    @任務

    def get_cars(自我):

        self.client.get('/汽車')

    

    @任務

    def get_planes(自我):

        self.client.get('/飛機')

 

這是使用 Locust 對 API 進行負載測試的基本示例。 首先,我們創建一個類 用戶行為,可以給它任何適當的名稱,但必須擴展 Http用戶。 HTTP用戶 是負責實例化多個虛擬用戶以執行我們在 用戶行為 類。 

通過使用以下方法裝飾方法來指定任務 @任務 裝飾器。 我們還有一個函數叫做 之間() 這允許我們指定在執行下一個任務之前要等待的秒數範圍。 您可以看到我們在代碼中為此分配了 5 到 10 秒的範圍。 

要運行代碼,請確保您仍在虛擬環境中。 如果您創建的那個正在被服務 API 的服務器使用,請打開一個新終端,將您的目錄更改為您的 項目 目錄,並激活您創建的虛擬環境。 您可以在上面找到用於激活虛擬環境的命令。 現在,在您的終端中輸入以下命令。

 

$ 蝗蟲 -f locust_test.py

 

你應該看到這樣的東西:

API 負載測試 2

默認情況下,locust 的 Web 界面位於 http://localhost/8089。 如果您訪問該網站,您應該會看到如下界面:

API 負載測試 3

從界面上,我們可以指定用戶數量、產生率(每秒創建的用戶)和主機。 您可以通過檢查服務器運行的終端來獲取主機的地址。 在我們的例子中,它位於端口 5000。當您單擊 開始蜂擁而至, 您將看到下面的界面。

API 負載測試 4

這會向您顯示各種有用的指標,例如失敗請求的數量、請求的平均時間、請求的最短時間、每秒請求數等。 一旦您對所看到的內容感到滿意,就可以單擊停止按鈕。 


除了 統計 選項卡,有一個 圖表 顯示更多的選項卡 信息 以圖表的形式,如下圖所示。

有一個 每秒總請求數圖, 響應時間圖,用戶數圖, 都是針對時間繪製的。 使用這些圖表,您可以確定有多少用戶在固定響應時間內是可以接受的,或者您可以觀察您的圖表以獲得恆定的響應時間,儘管用戶數量在增加,以及其他類似的見解。 如果你想分享這些 統計 與其他人一起,您可以從 下載數據 標籤。

總結...

對您的 API 進行負載測試是您開發過程中的一項重要活動,因此請確保將其納入您的設計週期。 順便說一句,您還可以通過改變用戶數量和生成率的值來執行其他負載測試類型。 

如果您想進行尖峰測試,請為用戶數指定一個較大的值(比如 2000),然後為您的生成率指定一個同樣大的值(例如 500)。 這意味著在 4 秒內,您將創建所有 2000 個用戶並訪問您的端點。 壓力測試將是類似的,但生成率的值要低得多。 要了解您能做的一切,請查看 Locust 文檔