因近期公司需要对ocr类产品(python语言编写的接口)进行压测,而之前的压测工具就meter、loadrunner对python语言的代码都不太兼容,故而找到了locust工具。
使用之前在网上对locust工具进行了些了解,发现它还是比较简单的,入门很快,轻便,而且还有较多人使用,相信测试结果还是比较准确的,误差不会太大。于是,开始着手准备了。
因locust在linux环境下运行较稳定,故我选择安装 在linux环境中。
第一步:安装locust pip3 install locust 安装后locust --version查看当前Locust版本
第二步,编写脚本
# -*- coding: UTF-8 -*- import requests from locust import HttpLocust,TaskSet,task from requests.packages.urllib3.exceptions import InsecureRequestWarning import base64 # 禁用安全请求警告 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) image_path = '/home/ocrpython/test/2.JPG' image_backpath = '/home/ocrpython/test/4.jpg' 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(1) def post_api (self): # 定义请求头 data_dis = {"img": img_to_b64(image_path), "orderNo": "test101901080933541948707600000004"} req = self.client.post("/id_ocr_batch", data=data_dis) http_code = req.status_code if http_code != 200: print("response null !!!") else: print(req.text) @task(1) def post_backapi(self): # 定义请求头 data_dis1 = {"img": img_to_b64(image_backpath), "orderNo": "back102002200933541948707600000004"} req = self.client.post("/id_ocr_batch", data=data_dis1) 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 = 5 max_wait = 50 host = 'http://XX.XX.XX.XX:5002' if __name__ == '__main__': import os os.system("locust -f /home/ocrpython/locust_idocr.py")
set_taskL类继承TaskSet类,用于描述用户行为:
1、使用@task装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,如上图,正反面的比例为1:1.
2、apiUser类用于设定性能测试属性
3、此脚本只能在装有locust的环境下运行,不能在pycharm内调试,故只能运行后看代码是否报错咯,若无报错,则性能测试脚本就ok了,则进行下一步
第三步:启动
进入代码目录,输入 locust -f bokeyuan.py --host=‘’http://XX.XX.XX:5002‘’
第四步:打开locust的web页面
使用上面的命令行启动Locust之后,应该打开浏览器并将其指向http://XX.XX.XX.XX:8089(XX.XX.XX.XX为装有locust的机器地址)
- Number of users to simulate :设置模拟用户数;
- Hatch rate(users spawned/second) :每秒产生(启动)的虚拟用户数;
设置好模拟用户后,点击Start swarming开始测试