腳本開發入門
本節主要介紹 Locust 執行參數化的方法,參數化的目的無非就是以下幾種:
- 模擬用戶在不同場景下的傳參差異化,比方說所有並發對同一個訂單執行支付,也許你需要檢驗這樣是否能發現到一些別的異常,但這是不符合性能測試需求的
- 滿足業務對用戶傳參的約束條件,比方說你如果壓測的是即時通訊的消息收發,即便支持多終端在線,但大量並發登錄一個賬號也是是不符合實際的
- 滿足系統對用戶傳參的約束條件
對一個參數執行參數化,首先得分清楚這個參數是屬於 “基礎數據” 還是 “業務數據” ,譬如 性別、省份、年月日,這些可以歸納為基礎數據,而對於與被測試系統業務有一定關聯性的,你可以歸為業務數據,例如 賬號密碼、userId、orderId。
通常來說,基礎數據 的數據范圍是相對數量固定的、內容有限的,即便切換測試環境也不影響的,所以一般在腳本中內實現隨機抽取,例如:
import random
sex = random.choice(['男性', '女性'])
year = random.randint(1949,2020)
而業務數據動輒幾百上千條,相對來說數量和內容都是可變的,則應該通過讀取外部文件實現(注意:Locust 的負載是通過 單進程 + 多協程 的實現,並非 多進程 + 多線程)。
范例:從 CSV 中讀取參數實現參數化
下面看一段腳本范例,實現了登錄賬號、密碼的參數化:
首先創建一個 csv 文件,第一列是登錄賬號,第二列是賬號對應的密碼,采用“,”分隔:
13800000001,abcd12ty
13800000002,abrd123y
13800000003,a12d1rty
13800000004,abc43454
13800000005,abcd12we
13800000006,abcd1wer
13800000007,abceqwe4
13800000008,abcd123k
13800000009,abcd1sd2
13800000010,123d124v
保存為:username.csv
然后,腳本實現:
from locust import HttpUser, task, constant, SequentialTaskSet
import queue
class taskcase(SequentialTaskSet):
@task
def pft(self):
user = self.user.user_list.get()
# print("username:{},password:{}".format(user["username"],user["password"]))
self.client.post(
"/login", {"username": user["username"], "password": user["password"]})
# 登錄后的一系列操作
self.user.user_list.put_nowait(user)
class ApiUser(HttpUser):
host = "http://www.demo.com"
wait_time = constant(0)
tasks = [taskcase]
user_list = queue.Queue()
with open("./username.csv") as file:
for line in file:
userInfo = line.split(',')
data = {
"username": userInfo[0],
"password": userInfo[1]
}
user_list.put_nowait(data)
實現效果
創建了10個用戶,user1~user10,依次取出測試賬號 13800000001 ~ 13800000010,執行登錄
Locust 腳本開發入門(1)
Locust 腳本開發入門(2)
Locust 腳本開發入門(3)
Locust 腳本開發入門(4)
返回:教程目錄
本節教程涉腳本