上一篇博客已经介绍了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")
版权声明:本文为qq_29699799原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。