在這節里面,我們實現的是:
一個用戶登錄后,隨機的訪問指定頁面的測試腳本。
測試用例
在下面的用例中,表示每個模擬的用戶執行任務過程中:
首先:
- 將以 100% 的概率通過login接口執行登錄操作;
然后:
- 有25%的概率按照順序訪問/hello頁面和/world頁面
- 有75%的概率訪問/item頁面(這里會傳一個動態id)
任務 | 目標 | 操作 | 參數 | 條件 |
---|---|---|---|---|
100% | 接口:login | 發送登錄請求 | username,password | |
25% - step 1 | 頁面:/hello | 瀏覽 hello 頁面 | / | |
25% - step 2 | 頁面:/world | 瀏覽 world 頁面 | / | |
75% | 頁面:/item | 瀏覽指定項目id的頁面 | id | 隨機瀏覽id值范圍為1~10000的項目 |
腳本實現
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")
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
導入 random 用於后續隨機數生成使用
從 locust 導入 HttpUser 用於提供http操作的方法
從 locust 導入 task 用於任務的規划設定
從 locust 導入 between 用於控制任務之間的延遲停頓
class QuickstartUser(HttpUser):
定義一個所需模擬的用戶類(在這里,我們需要模擬的是HTTP用戶)所以,繼承了 HttpUser。
HttpUser 為我們所需模擬的用戶類了 HTTP 客戶端屬性,該屬性是 HttpSession 的實例,可以用於向被測試系統發出 HTTP 請求。
wait_time = between(5, 9)
定義了一個等待時間的函數,可以使用戶執行每個任務以后,隨機的等待了5~9秒。
在本節案例腳本里面,分別有:index_page 和 view_item 兩個任務。
@task
def index_page(self):
self.client.get("/hello")
self.client.get("/world")
@task(3)
def view_item(self):
...
在定義的兩個任務 index_page 和 view_item 通過裝飾器控制了他們執行的權重為 1:3。
你可以理解為在每輪迭代的循環中:index_page 將有25%的概率被執行,而 view_item 將有 75% 的概率被執行。
而執行 index_page 時,將有兩個頁面訪問請求,分別是 /hello 和 /world
@task(3)
def view_item(self):
item_id = random.randint(1, 10000)
self.client.get(f"/item?id={item_id}", name="/item")
在 view_item 任務中,通過使用1~10000的隨機查詢參數加載動態URL。為了不在 Locust 的統計信息中獲得 10000 個單獨的條目。
為了把這個動態 URL 的所有響應樣本作為一個整體進行統計,使用 name 參數將所有這些請求分組到名為“ / item”的條目下。
只有定義了 @task 的任務才會被執行。
def on_start(self):
self.client.post("/login", {"username":"foo", "password":"bar"})
在這里,我們聲明了一個 on_start,用於模擬用戶啟動的時候,每個用戶必須執行的初始化操作,在此,它是一個 login 接口請求。
場景執行
把上面的代碼放在 my_locust_file.py 中,然后執行命令
locust -f my_locust_file.py
這時候訪問,http://127.0.0.1:8089
你就可以如界面所顯示的,填入
- 需要創建的並發數
- 並發的初始化效率
- 主機地址
測試即可成功運行。