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)
相关文章
相关标签/搜索