Locust入门
Locust入门
Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户:
Locust并不小众,从它Github的Star数量就可见一斑:
截止文章写作时,一共15951Star。
Locust生态良好,它已在多家外企(包括世界500强)投入使用:
如此看来,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文件:
import time
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(1, 2.5)
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")
@task(3)
def view_items(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
time.sleep(1)
def on_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界面:
填写信息后,就能开始压测了。Web界面提供了结果统计数据:
和性能指标走势图:
脚本解析
示例脚本解析如下:
# Locust用户脚本就是Python模块
import time
from locust import HttpUser, task, between
# 类继承自HttpUser
class QuickstartUser(HttpUser):
# 每个模拟用户等待1~2.5秒
wait_time = between(1, 2.5)
# 被@task装饰的才会并发执行
@task
def hello_world(self):
# client属性是HttpSession实例,用来发送HTTP请求
self.client.get("/hello")
self.client.get("/world")
# 每个类只会有一个task被选中执行
# 3代表weight权重
# 权重越大越容易被选中执行
# view_items比hello_wolrd多3倍概率被选中执行
@task(3)
def view_items(self):
for item_id in range(10):
# name参数作用是把统计结果按同一名称进行分组
# 这里防止URL参数不同会产生10个不同记录不便于观察
# 把10个汇总成1个"/item"记录
self.client.get(f"/item?id={item_id}", name="/item")
time.sleep(1)
# 每个模拟用户开始运行时都会执行
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
小结
本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask,Locust的Web功能是flask提供的。然后给出了一段示例代码,按照步骤上手Locust。最后对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?
参考资料:
Locust入门的更多相关文章
- 6000字Locust入门详解
目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...
- Python技术栈性能测试工具Locust入门
Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就可见一斑: 截止文章写 ...
- Locust性能测试框架,从入门到精通
1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...
- 【转】Locust性能-零基础入门系列(1)-wait_time属性用法
本篇文章,从局部出发,利用一个简单的测试,来说明场景模拟的wait_time属性的用法.wait_time为什么要单独拎出来讲,是因为它主要有两种模式,而初学者对这两种模式,容易混淆.1) wait_ ...
- Locust分布式负载测试工具入门
忽略元数据末尾 回到原数据开始处 Locust简介 Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试. 以下是github上的仓库地址 https://github.co ...
- 【转】Locust性能-零基础入门系列(3)-压力权重
本文将继续对Locust性能测试进行持续讲解,主要是讲解虚拟用户数分配和权重的关系.在locust file中进行多用户类的实现和操作.我们这次先上完整的代码: from locust import ...
- 【转】Locust性能-零基础入门系列(2) -重写wait_time
在虚拟模拟的时候,可能对等待时间有更高的要求,比如假如有这么一个场景要求:某任务要求每被执行1次,那么下次的等待时间就1秒钟.这种情况,是可以实现的,这也就体现了Locust的灵活性.可编程性,很多比 ...
- 【性能测试】【locust】快速入门
简介 locust是一个开源的分布式用户负载压力测试工具,对网站(其他系统,例如接口等)进行负载测试,并确定可以处理多少的并发用户,locust特点利用了协程支持,达到高数量级别的并发,以及基于事件驱 ...
- COGS 577 蝗灾 [CDQ分治入门题]
题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...
随机推荐
- Day06_32_Java各种内部类
内部类 内部类都有哪些? 成员内部类 匿名内部类 静态内部类 局部内部类 成员内部类 - 成员内部类内部不能有静态声明(静态方法和静态变量) - 成员内部类可以访问外部类中所有的数据包括静态数据和实例 ...
- 『动善时』JMeter基础 — 1、JMeter介绍
1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...
- 用laravel Maatwebsite\Excel 教你导出漂亮的Excel表单
先来看效果图 还算是漂亮吧 哈哈哈. 第一步当然是安装包咯 环境要求 PHP: ^7.0Laravel: ^5.5 composer require maatwebsite/excel 目前3.1 只 ...
- UVA10970大块巧克力
题意: 题意,给你一块n*m的巧克力,最终是要把他切成n*m快小蛋糕,问最小切多少刀?每一刀只能把一个整体切成两个整体,不可以把两个整体分成四个整体,就是说只能切一个地方. 思路: ...
- Windows中动态磁盘管理
目录 动态磁盘 基本磁盘和动态磁盘的转换 简单卷 跨区卷 带区卷 镜像卷 RAID-5卷 相关文章:硬盘分区形式(MBR.GPT).系统引导.文件系统.Inode和Block 动态磁盘 Windows ...
- POJ1698 最大流或者匈牙利
题意: 一个人他有n个任务,每个任务都有一些限制: (1)只能在一个星期中指定的日子去做,比如周1 2 6啥的 (2)总工作量有几天,就是一共要工作几天 (3)必须在几周之内完成,就 ...
- CTF密码学常见加解密总结
CTF密码学常见加解密总结 2018年03月10日 19:35:06 adversity` 本文链接:https://blog.csdn.net/qq_40836553/article/details ...
- (邹博ML)数学分析与概率论
机器学习入门 深度学习和机器学习? 深度学习在某种意义上可以认为是机器学习的一个分支,只是这个分支非常全面且重要,以至于可以单独作为一门学科来进行研究. 回忆知识 求解S. 对数函数的上升速度 我们使 ...
- Linux查看进程和查看端口占用
查看进程 ps -ef|grep ****.jar 查看端口占用(如果出现命令找不到,安装一下工具即可) netstat -lnp|grep 端口号 (命令找不到解决办法) yum install n ...
- COM组件对象模型基础
COM组件对象模型 COM组件对象模型是为了创建一种独立于任何编程语言的对象.COM对象提供统一的接口,在不同的编程环境中通过调用COM对象特定接口的方法来完成特定的任务.一般有三种方式编写COM组件 ...