使用Locust进行接口性能测试:安装、命令参数解析与示例解读(一)

发布时间 2023-08-04 16:18:48作者: 测试玩家勇哥

Locust是一款开源的Python性能测试工具,它可以模拟大量并发用户对网站或者其他接口进行压力测试

一、Locust简介与安装

1. 使用pip安装Locust:

pip3 install locust

2. 通过GitHub克隆项目并安装(推荐Python 3):

git clone https://github.com/locustio/locust
cd locust
python setup.py install

3. 安装pyzmq(可选,用于分布式模式):

pip install pyzmq

验证Locust是否安装成功:

locust --help

二、Locust命令参数详解

Locust的命令参数可以在启动Locust时使用,以配置测试的各种参数。以下是一些常用的命令参数:

  • -h--help: 查看帮助信息。

  • -H HOST--host=HOST: 指定被测试的主机URL,格式为http://example.com

  • --web-host=WEB_HOST: 指定Locust Web页面绑定的主机地址,默认为空字符串表示绑定到所有接口。

  • -P PORT--port=PORT--web-port=PORT: 指定Locust Web页面绑定的端口号,默认为8089。

  • -f LOCUSTFILE--locustfile=LOCUSTFILE: 指定运行Locust性能测试的Python文件,默认为locustfile.py

  • --csv=CSVFILEBASE--csv-base-name=CSVFILEBASE: 以CSV格式存储当前请求测试数据。

  • --master: 设置Locust以分布式模式运行,当前节点为master节点。

  • --slave: 设置Locust以分布式模式运行,当前节点为slave节点。

  • --master-host=MASTER_HOST: 分布式模式运行,设置master节点的主机或IP地址,只在与--slave节点一起运行时使用,默认为127.0.0.1

  • --master-port=MASTER_PORT: 分布式模式运行,设置master节点的端口号,只在与--slave节点一起运行时使用,默认为5557。注意,slave节点也将连接到这个端口+1上的master节点。

  • --master-bind-host=MASTER_BIND_HOST: 分布式模式运行,指定Locust master绑定的主机接口,只在与--master节点一起运行时使用,默认为*(绑定到所有可用接口)。

  • --master-bind-port=MASTER_BIND_PORT: 分布式模式运行,指定Locust master绑定的端口号,只在与--master节点一起运行时使用,默认为5557。注意,Locust还会使用这个端口+1,因此默认情况下master节点将绑定到5557和5558端口。

  • --no-web: 禁用Locust Web页面,直接运行测试。需要同时指定-c-r参数。

  • -c NUM_CLIENTS--clients=NUM_CLIENTS: 指定并发用户数,仅在--no-web模式下生效。

  • -r HATCH_RATE--hatch-rate=HATCH_RATE: 指定每秒启动的用户数,仅在--no-web模式下生效。

  • -n NUM_REQUESTS--num-request=NUM_REQUESTS: 指定总请求数量,仅在--no-web模式下生效。

  • -t RUN_TIME--run-time=RUN_TIME: 设置运行时间,例如:300s(300秒)、20m(20分钟)、3h(3小时)、1h30m(1小时30分钟)。仅在--no-web模式下生效。

  • -L LOGLEVEL--loglevel=LOGLEVEL: 选择日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)。默认为INFO。

  • --logfile=LOGFILE: 指定日志文件路径。如果未设置,则日志输出将在控制台。

  • --print-stats: 在控制台打印统计信息。

  • --only-summary: 仅打印摘要统计信息。

  • --no-reset-stats: 在测试完成后不重置统计数据。

  • -l--list: 显示可用的Locust类列表,并退出。

  • --show-task-ratio: 打印Locust测试类的任务执行比例。

  • --show-task-ratio-json: 以JSON格式打印Locust测试类的任务执行比例。

  • -V--version: 查看当前Locust工具的版本号。

三、编写Locust性能测试脚本

Locust两个主要的类:继承自HttpLocust的模拟用户类和继承自TaskSet的测试任务类。

简单的Locust性能测试脚本示例:

# locustfile.pyfrom locust import HttpLocust, TaskSet, task
class WebsiteTasks(TaskSet):    def on_start(self):        self.client.post("/login", {            "username": "test",            "password": "123456"        })    @task(2)    def index(self):        self.client.get("/")    @task(1)    def about(self):        self.client.get("/about/")class WebsiteUser(HttpLocust):    task_set = WebsiteTasks    host = "http://example.com"    min_wait = 1000
    max_wait = 5000

创建了WebsiteUser类作为模拟用户,并指定了WebsiteTasks作为测试任务类。

定义了index()about()方法来模拟用户访问网站的不同页面。

定义属性minx_wait  和 max_wait 用于控制每个用户执行任务之间得等待时间参数,在我们的示例中也就是表示,每个用户在执行两个任务之间将等待1~5秒,避免所有用户同时发起请求,与实际业务更准确。

  • min_wait:表示用户执行两个任务之间的最小等待时间,单位为毫秒。

  • max_wait:表示用户执行两个任务之间的最大等待时间,单位为毫秒。

定义 on_start 方法,在每个用户开始执行任务之前要执行的操作,类似unittest中得setup方法,可以在这里进行登录。

四、运行Locust测试

命令行运行Locust测试:

locust -f locustfile.py --web-host=127.0.0.1 --web-port=8089

-f指定Locust测试脚本路径,--web-host--web-port指定Locust Web页面的绑定主机和端口。

然后浏览器输入:localhost:8089 即可以尽情享受测试了。

图片

图片

总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注我:公众号\博客\CSDN\B站:测试玩家勇哥;我会不定期地分享更多的精彩内容。感谢你的阅读和支持!


题外话,勇哥打算把新建的技术交流群,打造成一个活跃的高质量技术群。工作中遇到的技术问题,都可以在里面咨询大家,还有工作内推的机会。有兴趣的小伙伴,欢迎加我(记得备注是进群还是报名学习)???****

图片?****?********?长按上方二维码2秒,关注我


勇哥,10年落魄测试老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测试主管,日常工作比较繁杂,主要负责自动化测试,性能测试、软件质量管理及人员管理。工作之余专注于为粉丝进行简历修改、面试辅导、模拟面试、资料分享、一对一自动化测试教学辅导等副业发展。目前已服务十多位小伙伴,取得高薪offer。

关注公众号,测试干货及时送达图片图片图片

往期精选文章?:
接口自动化测试项目2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等
揭秘抓包利器:Python和Mitmproxy让您轻松实现接口请求抓取与分析!
构建高效的接口自动化测试框架思路
Pytest 快速入门
接口自动化之测试数据动态生成并替换
requests模块该如何封装?
接口自动化如何封装mysql操作
一文看懂python如何执行cmd命令
最通俗易懂python操作数据库
python-Threading多线程之线程锁
python正则一篇搞掂
性能测试之必备知识

性能分析思

Python + ChatGPT来实现一个智能对话的钉钉机器人
一文看懂python如何执行cmd命令