locust脚本参数化(queue)

    上一篇博客已经介绍了locust的基础用法,现在讲下脚本的参数化

    因我这次的任务是压测ocr类的产品,故它对不同大小、不同像素、不同清晰度的图片的识别的响应时间是不一样的,故而为了更好的模拟现实现实场景,需要对脚本进行参数化,没想到locust还真的可以像jmeter\loadrunner那样进行参数化,今天介绍的参数化函数为locust自带的queue函数

     queue.Queue(maxsize)

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

代码如下:

# -*- coding: UTF-8 -*-
import requests
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import base64
import queue
import glob

# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

img_path_list = glob.glob('/home/ocrpython/nanjingocr/picture/*.jpg')  #总共有150张图片

def img_to_b64(img_path):
    with open(img_path, 'rb') as f:
        base64_data = base64.b64encode(f.read())
    return base64_data.decode('utf-8')


class set_task (TaskSet):
    @task
    def post_api (self):
        # 定义请求头
        # data_dis = {"img": img_to_b64(image_path), "orderNo": "test101901080933541948707600000004"}
        try:
            data1 = self.locust.queueData.get()  #获取队列里的数据
            data2 = self.locust.queueData.put_nowait(data1)  #再将取出的数据插入队尾,对数据进行循环使用
        except queue.Empty: #//队列取空后,直接退出
            print('no data exist')
            exit(0)

        payload = {
            'img': data1['img'],
            'orderNo': data1['orderNo'],
        }
        req = self.client.post("/id_ocr_batch", data=payload)
        http_code = req.status_code
        if http_code != 200:
            print("response null !!!")
        else:
            print(req.text)

class apiUser(HttpLocust):
    task_set = set_task
    min_wait = 2
    max_wait = 500
    host = 'http://XX.XX.XX.XX:6022'
    # print(1)
    queueData = queue.Queue() # 队列实例化

    for i in range(150):   #循环数据生成
        data = {
            "img": img_to_b64(img_path_list[i]),
            "orderNo": "test%d" % i,
        }
        queueData.put_nowait(data)  #将data存入队列中


if __name__ == '__main__':
    import os
    os.system("locust -f /home/ocrpython/nanjingocr/locust_idocr.py")

你可能感兴趣的:(locust,python基础)