python服务器性能测试工具,Python 性能测试工具 Locust 极简入门

Locust是一款基于Python的开源性能测试工具,以其简单易用和高并发能力受到广泛关注。本文介绍了Locust的安装、使用步骤及一个简单的示例脚本,展示了如何通过Locust进行性能测试,并对脚本进行了详细解析。通过Web界面,用户可以实时监控性能测试结果,便于优化系统性能。
摘要由CSDN通过智能技术生成

原标题:Python 性能测试工具 Locust 极简入门

Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户:

2b9267080398d56a1eba55b208495fde.png

Locust并不小众,从它Github的Star数量就可见一斑:

f144f6864a030a4bd1250b3deb692460.png

截止文章写作时,一共 15951Star。

Locust生态良好,它已在多家外企(包括 世界500强)投入使用:

d50b2a5bd54e30ce363df6500fd1afe8.png

如此看来,Locust是非常值得学习和掌握的一款工具。

Python的魔力在于化繁为简, 基于Python的Locust也能给仍然困惑于性能测试的我们带来启发。

Locust特点

以纯Python方式编写用户脚本,提供极大自由度。

用户脚本可以串行方式编写,Locust会通过轻量级进程/协程产生并发,无需自己做并发编程。

并发量大,借助于gevent库,Locust能产生成千上万并发请求。

开销小,Locust用户运行时开销很小。

良好的Web UI对性能结果实时监测。

能测任何系统任何协议,只需要写个client即可。

开放REST API,尽情发挥。安装Locust

需要Python版本 3.6及以上。

执行pip命令:

$pip install locust

验证安装成功:

$locust -V

安装时会一并安装依赖库:

Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth,ConfigArgParse, pyzmq, psutil, locust

能看出来flask为Locust提供了Web功能。快速上手

使用Locust一般按照以下步骤进行:

编写Python用户脚本。

使用 locust 命令执行性能测试。

(可选)通过Web界面监测结果。

示例代码如下,新建locustfile.py文件:

importtime

fromlocust importHttpUser, task, between

classQuickstartUser( HttpUser):

wait_time = between( 1, 2.5)

@task

defhello_world( self):

self.client.get( "/hello")

self.client.get( "/world")

@task(3)

defview_items( self):

foritem_id inrange( 10):

self.client.get( f"/item?id= {item_id}", name= "/item")

time.sleep( 1)

defon_start( self):

self.client.post( "/login", json={ "username": "foo", "password": "bar"})

路径切换到locustfile.py文件所在目录,执行命令:

$locust

也可以通过 -f 指定某个目录文件:

$locust -f locust_files/my_locust_file.py

运行后,打开http://127.0.0.1:8089看到Web界面:

ad9019a20f1ea02c93b7aea0fa6b62c4.png

填写信息后,就能开始压测了。Web界面提供了结果统计数据:

691cb650a7467876b64091a248e95403.png

和性能指标走势图:

cf1e12e1919466c2eabf8134230b5aac.png

脚本解析

示例脚本解析如下:

# Locust用户脚本就是Python模块

importtime

fromlocust importHttpUser, task, between

# 类继承自HttpUser

classQuickstartUser( HttpUser):

# 每个模拟用户等待1~2.5秒

wait_time = between( 1, 2.5)

# 被@task装饰的才会并发执行

@task

defhello_world( self):

# client属性是HttpSession实例,用来发送HTTP请求

self.client.get( "/hello")

self.client.get( "/world")

# 每个类只会有一个task被选中执行

# 3代表weight权重

# 权重越大越容易被选中执行

# view_items比hello_wolrd多3倍概率被选中执行

@task(3)

defview_items( self):

foritem_id inrange( 10):

# name参数作用是把统计结果按同一名称进行分组

# 这里防止URL参数不同会产生10个不同记录不便于观察

# 把10个汇总成1个"/item"记录

self.client.get( f"/item?id= {item_id}", name= "/item")

time.sleep( 1)

# 每个模拟用户开始运行时都会执行

defon_start( self):

self.client.post( "/login", json={ "username": "foo", "password": "bar"})

小结

本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask, Locust的Web功能是flask提供的。

然后给出了一段示例代码,按照步骤上手Locust。最后对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?

参考资料:

https://locust.io/

https://docs.locust.io/en/stable/

- EOF -

点击标题可跳转

1、 记一次 Python Web 接口优化,性能提升25倍!

2、 Python最佳代码实践:性能、内存和可用性!

3、 高性能 PyTorch 是如何炼成的?过来人吐血整理的 10 条避坑指南

觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

点赞和在看就是最大的支持❤️返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值