概述:併發
和Loadrunner同樣對於多用戶併發時,重複登入或者數據的重複使用會形成腳本的失敗,那麼咱們引入Loadrunner的參數化概念,對用戶數據進行參數化來使腳本運行成功。post
頭緒:spa
user1 | user2 | user3 | |
迭代1 | account1 | account2 | account3 |
迭代2 | account4 | account5 | account6 |
從上表咱們能夠看到用戶迭代使用不一樣帳號操做腳本,此處咱們列舉用戶註冊的例子。code
轉換思惟,不一樣用戶用不一樣的帳號信息去進行註冊,也就是說能夠看作一個隊列排隊取數的一個過程。orm
【account1,account2,。。。。】blog
Python庫中正好有Queue隊列完美符合咱們的使用場景隊列
Queue介紹:get
Queue的種類:it
Queue.Queue(maxsize=0)io
FIFO即First in First Out,先進先出。Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明瞭隊列中能存放的數據個數的上限。一旦達到上限,插入會致使阻塞,直到隊列中的數據被消費掉。若是maxsize小於或者等於0,隊列大小沒有限制。
Queue.LifoQueue(maxsize=0)
LIFO即Last in First Out,後進先出。與棧的相似,使用也很簡單,maxsize用法同上
class Queue.PriorityQueue(maxsize=0)
構造一個優先隊列。maxsize用法同上。
基本方法:
Queue.Queue(maxsize=0) FIFO, 若是maxsize小於1就表示隊列長度無限
Queue.LifoQueue(maxsize=0) LIFO, 若是maxsize小於1就表示隊列長度無限
Queue.qsize() 返回隊列的大小
Queue.empty() 若是隊列爲空,返回True,反之False
Queue.full() 若是隊列滿了,返回True,反之False
Queue.get([block[, timeout]]) 讀隊列,timeout等待時間
Queue.put(item, [block[, timeout]]) 寫隊列,timeout等待時間
Queue.queue.clear() 清空隊列
Locust中使用場景:
經過循環,每次put 數據data到隊列結尾
user_data = queue.Queue() for i in range(100): data = { "username": "test%d" % i, "password": "pwd%d" % i, "email": "test%d@xxx.com" % i, "phone": "135%08d" % i, } user_data.put_nowait(data)
再經過queue.get方法,取出隊列第一個數據
實際使用場景:
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%d@xxx.com" % count, }
若是須要對數據進行循環使用(好比登入腳本),能夠在隊列取出後,再把取出數據放入隊尾中:
self.locust.queueData.put_nowait(data)