• Locust 参数化


    概述:

    和Loadrunner一样对于多用户并发时,重复登入或者数据的重复使用会造成脚本的失败,那么我们引入Loadrunner的参数化概念,对用户数据进行参数化来使脚本运行成功。

    头绪:

      user1 user2 user3
    迭代1 account1 account2 account3
    迭代2 account4 account5 account6

    从上表我们可以看到用户迭代使用不同账号操作脚本,此处我们列举用户注册的例子。

    转换思维,不同用户用不同的账号信息去进行注册,也就是说可以看做一个队列排队取数的一个过程。

    【account1,account2,。。。。】

    Python库中正好有Queue队列完美符合我们的使用场景

    Queue介绍:

    Queue的种类:

    • FIFO

     Queue.Queue(maxsize=0)

    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)
  • 相关阅读:
    零售行业解决方案一
    N-Tier Entity Framework开源项目介绍
    软件代码生成之Codesmith模板.netTiers
    ActiveMQ消息队列介绍
    EntityFramework动态多条件查询与Lambda表达式树
    GitLab版本管理
    REST服务介绍
    2014年物联网Internet of Things应用简介
    wordpress如何屏蔽wp-json(禁用REST API)
    bootstrap tab切换如何让鼠标移动自动切换内容
  • 原文地址:https://www.cnblogs.com/grandlulu/p/9264819.html
Copyright © 2020-2023  润新知