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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章