Locust-8-参数化(Queue)

前言

比如我们要100个用户同时登录来测试系统的性能情况,相同的用户来登录肯定是不符合实际要求的,此时我们可以考虑用参数化

思路:用队列将有效用户生成出来put到对列中,在从队列中get出来,传给登录请求

 

Queue

Queue.Queue(maxsize=0)

Queue提供了一个基本的FIFO(先进先出)容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。

 

Queue创建的实例对象常用方法

queue.qsize():返回当前队列包含的消息数量

queue.empty():如果队列为空,返回True,反之False

queue.full():如果队列满了,返回True,反之False

queue.put(item,[block[,timeout]]:将item消息写入队列,block默认值为True

1)bolck使用默认值(True)

①没有设置timeout(单位秒),消息队列如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息队列腾出空间为止

②设置了timeout,则会等待timeout秒,若还没空间,则抛出“queue.full”异常

2)block值为False,消息队列如果没有空间可写入,则会立刻抛出“queue.Full”异常

queue.put_nowait(item):相当于queue.put(item,False)

queue.get([nlock[,timeout]]):获取队列中的一条消息,然后将其从队列中移除,block默认为True

1)bolck使用默认值(True)

①没有设置timeout(单位秒),消息队列如果为空,此时程序将被阻塞(停在读取状态),直到从消息队列读到信息为止

②设置了timeout,则会等待timeout秒,若还没读取到任何消息,则抛出“queue.Empty”异常

2)block值为False,消息队列如果为空,则会立刻抛出“queue.Empty”异常

queue.get_nowait():相当于queue.get(False)
 

代码

from locust import task,TaskSet,HttpLocust
import queue
import os

class MyTaskSet(TaskSet):

    def on_start(self):
        print("----- Test start -----")

    def on_stop(self):
        print("----- Test over -----")

    @task
    def login(self,pwd="b123456"):
        self.headers = {
            "Origin": "http://192.168.1.9:8080",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
        }
        path = "/SSOAuth?action=login&code=undefined&gotoURL=http%3A%2F%2F192.168.1.9%3A8080%2Fportal%2Fgeoindex.do"
        try:
            user_data = self.locust.queue_data.get()  # 从队列中取出user赋值给user_data
            print(user_data)
        except queue.Empty:
            print("数据为空了...")
            exit()

        da = {"userAccount": user_data, "pwd": pwd}
        data = {
            "data": '%s' % da
        }
        self.client.post(path, headers=self.headers, data=data, verify=False)


class MyLocust(HttpLocust):
    """w01~w0100为有效用户名,密码为默认的b123456"""
    task_set = MyTaskSet  # 指向任务集合
    host = "http://192.168.1.9:8080"  # web项目的话这里要设置host属性,否则是报错的
    queue_data = queue.Queue()  # 实例化一个队列
    for i in range(1,101):
        user = "w0"+str(i)
        print(user)
        queue_data.put_nowait(user) # 把每一个user存到队列中


if __name__ == '__main__':
    # os模块执行系统命令,相当于在cmd切换到当前脚本目录,执行locust -f locust_login.py
    os.system("locust -f locust_login.py")

 

执行同时用fiddler抓包查看共发送了100条登录请求,以及提交的数据为从队列中取出的数据

 


版权声明:本文为qq_39620483原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。