前言
實現場景:所有並發虛擬用戶共享同一份測試數據,並且保證虛擬用戶使用的數據不重復。
例如,模擬10用戶並發注冊賬號,總共有100個手機號,要求注冊賬號不重復,注冊完畢后結束測試
准備數據
虛擬用戶 | locust1 | locust2 | locust3 | locust4 | locust5 | locust6 | locust7 | locust8 | locust9 | locust10 |
---|---|---|---|---|---|---|---|---|---|---|
共享數據 | tel1 | tel2 | tel3 | tel4 | tel5 | tel6 | tel7 | ...... | tel99 | tel100 |
虛擬用戶數,可以在啟動的時候設置,這里先裝備好注冊需要用到的手機號,可以用list生成
# 生成測試手機號
demo = 13812120000
teldatas = [str(demo+i) for i in range(100)]
print(teldatas)
將測試數據加到隊列
import queue
# 生成測試手機號
demo = 13812120000
teldatas = [str(demo+i) for i in range(100)]
# print(teldatas)
# 添加到隊列
telqueue = queue.Queue()
for i in teldatas:
telqueue.put_nowait(i)
注冊demo參考
以下是一個簡單的demo模型,具體的注冊接口替換過去就可以了
# 保存為 locustfile4.py
# coding=utf-8
from locust import HttpLocust, TaskSet, task
import queue
class test_taskset(TaskSet):
@task
def register(self):
try:
tel = self.locust.telqueue.get() # 獲取隊列里的數據
print(tel)
except queue.Empty: # 隊列取空后,直接退出
print("no data exist")
exit(0)
print("當前注冊手機號:%s" % tel)
# body = {
# "username": tel,
# "psd": "123456",
# }
# self.client.post("/register", data=body) # POST方法發送請求
class test_run(HttpLocust):
host = 'http://192.168.1.xxx:80'
task_set = test_taskset
# 生成測試手機號
teldatas = [str(13812120000+i) for i in range(100)]
# 添加到隊列
telqueue = queue.Queue()
for i in teldatas:
telqueue.put_nowait(i)
if __name__ == "__main__":
import os
os.system("locust -f locustfile4.py")
cmd命令行啟動
$ locust -f locustfile4.py
打開web頁面,輸入10個用戶, 可以看到控制台的打印
[2018-09-21 00:00:58,013] DESKTOP-HJ487C8/INFO/stdout: 當前注冊手機號:13812120096
[2018-09-21 00:00:58,013] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout: 13812120097
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout: 當前注冊手機號:13812120097
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout: 13812120098
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout: 當前注冊手機號:13812120098
[2018-09-21 00:00:58,015] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,017] DESKTOP-HJ487C8/INFO/stdout: 13812120099
[2018-09-21 00:00:58,017] DESKTOP-HJ487C8/INFO/stdout:
[2018-09-21 00:00:58,017] DESKTOP-HJ487C8/INFO/stdout: 當前注冊手機號:13812120099
[2018-09-21 00:00:58,017] DESKTOP-HJ487C8/INFO/stdout: