1. 程式人生 > 其它 >Locust 快速開始:一個簡單的登入、頁面瀏覽指令碼【三】

Locust 快速開始:一個簡單的登入、頁面瀏覽指令碼【三】

在這節裡面,我們實現的是:

一個使用者登入後,隨機的訪問指定頁面的測試指令碼。

測試用例

在下面的用例中,表示每個模擬的使用者執行任務過程中:

首先:

  • 將以 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或者http://localhost:8089

你就可以如介面所顯示的,填入

  • 需要建立的併發數
  • 併發的初始化效率
  • 主機地址

測試即可成功執行。

返回目錄