目前做性能测试,比较简单常用的工具就是jmeter,但是对于一些复杂需求和场景需要编写java代码,如果只会Python能做性能测试吗,当然可以,今天就介绍一下Python强大的性能测试框架Locust。
Locust简介
一个基于python语言的开源性能测试工具,Locust直译为蝗虫,比喻他能产生蝗虫般成千上万的并发,内部使用requests完成http请求,使用协程完成并发请求,提供WebUI美观方便,支持分布式并发,当然也可以根据需要进行二次开发。
它的最重要优点是运行开销小,可以产生更高的并发请求。
更详细的介绍和使用可以查看官网介绍:https://locust.io/
Github地址:https://github.com/locustio/locust
Locust安装
需要Python版本3.6及以上环境。
pip install locust
查看是否安装成功
locust -V
一个简单的Locust案例
新建一个用户行为类,定义任务集(用户行为),包含一个或多个请求。设置压测的基本参数,比如指向压测的host,等待时间等。
from locust import task, HttpUser, between
# 定义用户行为
class UserBehavior(HttpUser):
host = "https://www.baidu.com" # 配置URL
wait_time = between(1,2) # 用户执行每个task之后等待1-2秒
# task装饰的方法会在Locust虚拟用户运行过程中被调用
# 定义任务Locust发送请求是基于requests实现,请求的使用requests库一致
@task
def test_baidu(self):
resp = self.client.get("/")
return resp.status_code
当然,你也可以添加多个请求
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(1, 2)
# wait_time = constant(3) # 每次请求停顿时间 (思考时间)
# 每个模拟用户开始执行,只执行一次
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")
# task()参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。
@task(3)
def view_item(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
运行Locust
在命令行运行Locust脚本,在cmd下(win),进入到脚本目录,执行命令:
locust -f 文件名.py
设置测试
命令行运行之后,通过浏览器访问:http://localhost:8089(Locust启动网络监控器,默认为端口号为:8089)出现如下界面启动成功,输入对应的虚拟用户数、用户启动速度,点击Start swarming,开始运行性能测试。
Number of users:设置模拟用户总数
Spawn rate(users started/second):每秒新增虚拟用户数
Host:目标服务器的ip端口或域名
测试监控字段说明
点击STOP,运行完成,查看测试统计如下,类似于jmeter中聚合报告的内容:
Type:请求的类型,例如GET/POST。
Name:请求的路径。这里为百度首页,即:https://www.baidu.com/
request:当前请求数量。
fails:当前请求失败的数量。
Median:50%的用户响应时间,单位毫秒
90%ile:90%请求响应时间
Average:所有请求的平均响应时间,单位毫秒。
Min:最小响应时间,单位毫秒。
Max:最大响应时间,单位毫秒。
Average size:平均网络字节数
Current RPS:每秒请求书(TPS)。
Current Failures/s:每秒失败数。
响应时间和TPS曲线图
好书推荐
《Python编程从入门到精通》
本书侧重于Python程序开发过程中重点和难点的理解,结合具有典型性的程序案例,用通俗的语言由浅入深、循序渐进地帮助读者掌握Python语言。知识点都使用生活中的案例帮助理解,每个案例都有详尽的代码解释,实战部分也会将Python语言与Web和数据分析等技术相结合,进行技术应用上的扩展。
留言点赞送此书:点在看本文并留言(本文内容相关、本书相关、其他公众号建议),我将随机挑选一位粉丝包邮送出本书(同一人一个月只有一次机会),送书活动会持续进行,机会多多,大家持续关注,感谢。