Locust 官方文檔 2: 快速開始

安裝

一般直接通過 pip 就可以安裝:

$ pip install locust

注意:
Locust 1.x 版本與之前的設計有很大的顛覆,所以你看到的很多代碼會與你在網上搜索到的代碼不一致。
如果示例代碼運行不成功,請升級你的 Locust。

快速開始

在 Locust 中,可以使用 Python 代碼定義用戶行爲。然後,可以使用locust命令及其 Web 界面生成大量虛擬用戶並收集虛擬用戶的請求統計信息。

一個 locustfile.py

import random
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(5, 9)

    @task
    def index_page(self):
        self.client.get("/hello")  # 這裏的地址需要排除 host 部分
        self.client.get("/world")

    @task(3)
    def view_item(self):
        item_id = random.randint(1, 10000)
        self.client.get(f"/item?id={item_id}", name="/item")

    def on_start(self):
        self.client.post("/login", {"username":"foo", "password":"bar"})

對上面的代碼進行分解:

import random
from locust import HttpUser, task, between

Locust 文件只是普通的 Python 代碼文件,可以手動引入 Locust 相關的庫以及你需要用到的其他第三方庫。

class QuickstartUser(HttpUser):

在這裏,我們爲要模擬的用戶定義一個類。它繼承自HttpUser,該屬性爲每個用戶提供了一個 client 屬性,該屬性是HttpSession的一個實例。可用於向負載測試的目標系統發出 HTTP 請求。當測試開始時,Locust 將爲它每個虛擬用戶創建一個此類的實例,並且每個虛擬用戶會在自己的 gevent 線程中運行這些實例。

HttpUser 類是 Locust 1.x 版本中用來代替以前的 HttpLocust 類,用來定義虛擬用戶。是 User 類的子類。

wait_time = between(5, 9)    # 思考時間

我們的類定義了一個wait_time函數,它將使模擬用戶在每個任務執行後的 5 ~ 9 秒之間等待。等待時間主要爲了模擬用戶在實際使用過程中存在的思考時間,對實際用戶在操作系統過程中來說,他/她不會無時無刻不停的操作系統,而是操作一下暫停思考下一步動作。

有關更多信息,請參見wait_time attribute.

@task
def index_page(self):
    self.client.get("/hello")
    self.client.get("/world")

@task(3)
def view_item(self):
    ...

通過用 @task 裝飾了兩個方法來聲明瞭兩項任務,其中一種具有更高的權重(@task(3))。只有通過 @task 裝飾的方法纔會在 Locust 虛擬用戶運行過程中被調用。

當虛擬用戶運行時,會從兩個任務中選擇一個運行,由於 view_item 的權重爲 3,因此在選擇任務時會有三倍的機會選擇 view_item。虛擬用戶會根據權重調用一個方法來運行,運行後會根據wait_time定義的等待時間休眠 5~9 秒。待休眠時間結束後,會重新根據權重調用一個新任務來執行,並循環重複。

在測試過程中,只有被 @task 定義的方法纔會被調用。當然被定義爲任務的方法可以調用你定義的其他方法。

@task(3)
def view_item(self):
    item_id = random.randint(1, 10000)
    self.client.get(f"/item?id={item_id}", name="/item")

view_item任務中,我們通過使用查詢參數動態加載 URL,該查詢參數是一個從 1 到 10000 之間隨機選擇的數字。爲了避免在 Locust 的統計信息中獲得 10k 個單獨的條目(Locust 會根據 URL 分組統計信息),會使用名稱參數name parameter將所有這些請求分組到名爲/item的條目下。

注意,只有用@task裝飾的方法纔會被調用,因此可以在 locustfile.py 的測試類中隨意定義其他的輔助方法,以提升測試場景的複雜和靈活性。

def on_start(self):

此外,我們還聲明瞭on_start方法。每個虛擬用戶在啓動時都會調用具有該方法。

有關更多信息,請參見on_starton_stop方法

on_start() 方法是 hook 函數之一,用來定義在一些特殊事件下觸發的邏輯。 on_start() 方法是在虛擬用戶啓動(啓動事件)時會觸發的方法。

開始執行 Locust

將以上代碼放在當前目錄中名爲locustfile.py的文件中,然後運行:

$ locust

Locust 會默認查找當前目錄下名爲locustfile.py,如果該文件不在當前文件夾或者你取了其他的名字,就需要加上下面的 -f 參數了。

如果你的locustfile.py位於其他地方,則可以使用-f參數指定它:

$ locust -f locust_files/my_locust_file.py

注意:要查看所有可用選項,請輸入:locust --help或查看Configuration

Locust 的 web 界面

一旦使用上述命令行之一啓動 Locust 後,會在本地開啓一個服務並佔用8089端口,你可以打開瀏覽器並將其指向http://127.0.0.1:8089

如果 http://127.0.0.1:8089 無法找到,你可以嘗試一下 http://locust:8089

然後,你會看到如下界面:

請根據表單內容填寫,並嘗試一下。

  • Number of total users to simulate -> 最大併發用戶數
  • Hatch rate -> 孵化率(每秒生成的虛擬用戶數)
  • Host -> 被測系統的 Host(如果你在 User類 中定義了host 屬性,會自動帶出來,如果沒有就需要輸入)

孵化率 Hatch rate,在 Locust 中把生成虛擬用戶這個過程稱之爲“孵化”。

更多選項

要運行分佈在多個 Python 進程或計算機上的 Locust,可以使用--master命令行參數啓動單個 Locust 主進程,然後在--worker命令行參數中使用任意數量的 Locust worker 進程。

更多關於分佈式運行的信息,請參閱Locust 分佈式運行

要直接開始測試而不使用 Web 界面,請使用--headless

也可以通過環境變量設置參數
Parameters can also be set through [environment variables],或寫入配置文件config file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章