locust 登錄用戶參數化 queue

背景:壓測某一個功能點的時候,系統存在校驗機制,一個賬戶的token信息,只允許操作一個vuser(類似一個功能點,當兩個相同的賬號去訪問的時候,第一個會訪問成功,第二個就會訪問失敗)。所以只能對登錄的賬戶進行參數。

參考了https://www.cnblogs.com/grandlulu/p/9264819.html ,運用隊列任務消費,來實現不同賬號的登錄,附上大佬的源代碼

from locust import HttpLocust, TaskSet, task
import queue

class test_taskset(TaskSet):

    @task
    def register(self):
        try:
            data = self.locust.queueData.get()  //獲取隊列裏的數據
            print(data)
        except queue.Empty:                     //隊列取空後,直接退出
            print('no data exist')
            exit(0)
        print('actually user and password is {} and {}'.format(data['username'], data['password']))
        payload = {
            'username': data['username'],
            'password': data['password'],
        }
        self.client.post('/register', data=payload) //POST方法發送請求


class test_run(HttpLocust):
    host = '192.168.1.100:16060'
    task_set = test_taskset
    queueData = queue.Queue()  //隊列實例化
    for count in range(100):   //循環數據生成
        data = {
            "username": "test%d" % count,
            "password": "pwd%d" % count,
            "email": "test%[email protected]" % count,
        }
        queueData.put_nowait(data)

對locust執行中發現,多用戶執行的時候,每個vuser都會初始化一次register,所以隊列池要對所有vuser共享,就只能放到test_run類中,這樣就可以實現了。上面要注意的地方 一個是隊列任務要實現共享,第二個就是獲取線程池的值的時候,用的是

self.locust.queueData.get(),就能獲取到裏面的值了。

 

擴展:如果生成的是一個需要處理的任務池,比如刪除系統的訂單,這樣獲取訂單號的操作就不能放到register中了,因爲register只會初始化一次。所以得放到執行函數中。

具體的demo明天補充,下班~~~~~~~~~~~~

 

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