Locust 參數化

概述:併發

和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

  • FIFO

 Queue.Queue(maxsize=0)io

FIFO即First in First Out,先進先出。Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明瞭隊列中能存放的數據個數的上限。一旦達到上限,插入會致使阻塞,直到隊列中的數據被消費掉。若是maxsize小於或者等於0,隊列大小沒有限制。

  •  LIFO

Queue.LifoQueue(maxsize=0)

LIFO即Last in First Out,後進先出。與棧的相似,使用也很簡單,maxsize用法同上

  • priority

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)
相關文章
相關標籤/搜索