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

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。

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

posted @   测试玩家勇哥  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 DAN DAN 心魅かれてく(Cinema Version) FIELD OF VIEW
  2. 2 ロマンティックあげるよ 橋本潮
  3. 3 INNOCENT PRIMEVAL BREAKER GAME VERSION REOL
  4. 4 METAMORPHOSIS INTERWORLD
ロマンティックあげるよ - 橋本潮
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 吉田健美

作曲 : 池毅

おいでファンタジー

好きさミステリー

君の若さ隠さないで

不思議したくて冒険したくて

誰もみんなウズウズしてる

大人のフリしてあきらめちゃ

奇跡の謎など解けないよ

もっとワイルドに

もっとたくましく生きてごらん

ロマンチックあげるよ

ロマンチックあげるよ

ホントの勇気みせてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

トキメク胸に

キラキラ光った夢をあげるよ

いつかワンダフル

きっとビューティフル

人のジャングル迷いこんで

スリルしたくて幸せしたくて

何故かみんなソワソワしてる

思ったとおりに叫ばなきゃ

願いは空まで届かない

もっとセクシーに

もっと美しく生きてごらん

ロマンチックあげるよ

ロマンチックあげるよ

ホントの涙見せてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

淋しい心やさしく包んで

愛をあげるよ

ロマンチックあげるよ

ロマンチックあげるよ

ホントの勇気みせてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

トキメク胸に

キラキラ光った夢をあげるよ