Locust 基本使用
Locust 使用Python代码来定义用户行为,用它可以模拟百万级的并发用户来访问系统。
与其他性能工具对比如下:
| LoadRunner |
商业性能测试工具,报告完整,不支持二次开发 开发语言:C/Java 并发机制:进程/线程 |
| Jmeter |
开源性能测试工具,简单报告,支持二次开发。 开发语言:Java 并发机制:线程,需要在UI界面上通过选择组件来编写脚本,模拟的负载是线程绑定的, 模拟的每个用户都需要一个单独的线程,单台负载机可模拟的负载数有限。 |
| Locust |
开源性能测试工具,简单报告,支持二次开发。 开发语言:python 并发机制:协程,LoadRunner和Jmeter这类采用进程和线程的测试工具,很难在单机 上模拟出较高的并发压力。Locust的并发机制摒弃了进程和线程,采用协程(gevent) 机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。 |
locust的安装
# 1. 命令行安装
pip3 install locust # 2. 直接在pycharm中导入 # 3. github下载安装 https://github.com/locustio/locust/ clone后执行setup.py文件
python setup.py install # 检查是否安装成功
locust --help
locust版本信息、python版本以及依赖库如下查询:

gevent 是在python中实现协程的第三方库,协程又叫微线程Coroutine。
flask 是python 的一个web开发框架。
requests 是python中可进行http(s)请求的操作库。
msgpack 是一种快速、紧凑的二进制序列化格式,适用于类似Json的数据。
six提供了一些简单的工具用来封装Python2和Python3之间的差异性。
pyzmq 可用于Locust分布运行在多个进程/机器上。
实现例子及用法注释
访问博客首页例子
# coding:utf-8
from locust import HttpLocust, TaskSet, task
import urllib3 """
使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误, 忽略报错的方法如下:
InsecureRequestWarning: Unverified HTTPS request is being made.
Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
"""
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class UserBehavior(TaskSet):
# UserBehavior类,继承了TaskSet类,用于定义测试任务的 header = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"} # on_start 相当于任务开始的入口,可进行初始化,此处省略了实现
def on_start(self):
pass # @task()装饰的方法为一个事务。方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1
@task(1)
def cnblogsHome(self, header):
request = self.client.get("/", headers=header, verify=False) @task(2)
def cnblogsHome(self, header):
request = self.client.get("/belle-ls/", headers = header, verify = False)
class websitUser(HttpLocust):
"""
HttpLocust类继承了HttpSession类,HttpSession使用率requests.Session,所以用client方法请求登录后,会保存登录状态,具有session记忆功能
"""
task_set = UserBehavior #Task_set属性,它是唯一必须要有的,它指向Task Set类,定义用户的行为
min_wait = 3000 #请求等待最小时间
max_wait = 6000 #请求等待最大时间
# 每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间固定为1秒
# host:被测系统的host,当在终端中启动locust时没有指定--host参数时才会用到
# weight: 一个Locust实例被挑选执行的权重,数值越大,执行频率越高
# stop_timeout: 设置 Locust 多少秒后超时,如果为 None ,则不会超时。 if __name__ == "__main__":
import os
os.system("locust -f locustDemo.py --host=https://www.cnblogs.com")
@task装饰器和tasks属性:以下两种写法是等价的
from locust import TaskSet, task class UserBehavior(TaskSet):
@task
def job1(self):
self.client.get('/job1') @task
def job2(self):
self.client.get('/job2')
####################################
from locust import TaskSet def job1(obj):
obj.client.get('/job1') def job2(obj):
obj.client.get('/job2') class UserBehavior(TaskSet):
tasks = [job1, job2]
# 或者指定执行频率 tasks = {job1:1, job2:1}
执行脚本,locust启动。

web模式:如果Locust运行在本机,在浏览器中访问http://localhost:8089即可进入Locust的Web管理页面;如果Locust运行在其它机器上,那么在浏览器中访问http://locust_machine_ip:8089即可

web模式执行过程如下:

按钮:
Edit:点击该按钮可对模拟的总虚拟用户和每秒启动的虚拟用户数进行重新设定
STOP:停止运行,缺点----locust只能手动停止,无法自动停止
locust运行命令
"""
web模式运行
-f 指定脚本的绝对路径 --host指定被测接口的服务主机
"""
locust -f load_test.py --host=https://www.baidu.com """
--no-web模式运行
-c 设置虚拟用户数
-r 设置每秒启动虚拟用户数
-t 设置运行时间 """
locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m """
分布式运行Locust,如果是--no-web模式运行,master会等待slave机器节点接入后运行
--master 设置locust为master模式,网页交互会在这台节点机器中运行
--slave 设置locust的slave模式
--master-host 如果是本机多进程运行,可省略
"""
locust -f load_test.py --master
locust -f load_test.py --slave --master-host = 192.168.1.110
参数说明:
-h, –help:查看帮助
-H HOST, –host=HOST:指定被测试的主机,采用以格式:http://192.168.1.110
–web-host=WEB_HOST:指定运行 Locust Web 页面的主机,默认为空
-P PORT, –port=PORT, –web-port=PORT:指定 –web-host 的端口,默认是8089
-f LOCUSTFILE, –locustfile=LOCUSTFILE:指定运行 Locust 性能测试文件,默认为: 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:master运行模式需要设置host,默认是* 所有有效接口
–master-bind-port=MASTER_BIND_PORT:应该设置master端口号(只用于master执行是),默认5557. 也会使用这个端口+1的端口,所以默认master会被连接到5557和5558两个端口
–expect-slaves=EXPECT_SLAVES:开始测试之前期望多少个slave节点接入 (只–no-web模式).
–no-web:no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, –clients=NUM_CLIENTS:指定并发用户数,作用于 –no-web 模式
-r HATCH_RATE, –hatch-rate=HATCH_RATE:指定每秒启动的用户数,作用于 –no-web 模式。
-t RUN_TIME, –run-time=RUN_TIME:设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。
-L LOGLEVEL, –loglevel=LOGLEVEL:选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
–logfile=LOGFILE:日志文件路径。如果没有设置,日志将去 stdout/stderr
–print-stats:在控制台中打印数据
–only-summary:只打印摘要统计
–no-reset-stats:执行完后不重新设定
-l, –list:显示测试类, 配置 -f 参数使用
–show-task-ratio:打印 locust 测试类的任务执行比例,配合 -f 参数使用.
–show-task-ratio-json:以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用
-V, –version:查看当前 Locust 工具的版本.
Locust 基本使用的更多相关文章
- 性能测试工具Locust
An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...
- python httprequest, locust
r = self.client.get("/orders", headers = {"Cookie": self.get_user_cookie(user[0] ...
- Python Locust对指定网站“一键压测”
[本文出自天外归云的博客园] 前篇 前篇:Python Locust性能测试框架实践 本篇 承上——归纳过程 在前篇的基础上,我们可以利用Locust性能测试框架编写python脚本对指定网站或者接口 ...
- linux安装locust
linux安装locust 1. 安装epel扩展源(目的是为了在安装Pip时不出现一堆乱七八糟的错误信息) EPEL(http://fedoraproject.org/wiki/EPEL) 是由 F ...
- Python Locust性能测试框架实践
[本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...
- 性能测试框架Locust初学笔记
Locust初探 Locust是一款类似于Jmeter开源负载测试工具,所不同的是它是用python实现,并支持python脚本. locust提供web ui界面,能够方便用户实时监控脚本运行状态. ...
- 初遇locust
大概有四个月没有用过PYTHON的我. 今天差点都不知道怎么运行了. 说起来真是丢人呐. 幸好还是存留着一点点印象,再加上看了一下以前写的几篇文章, 还是比较快的想起来了.不然真的是要崩溃了. 刚开始 ...
- Locust性能测试工具的安装及实际应用
一.安装Locust 安装Locust之前先安装的库:gevent库:第三方库,gevent为python提供了比较完善的协程支持.使用gevent,可以获得极高的并发性能. pip install ...
- Locust性能测试框架,从入门到精通
1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...
- Locust no-web 模式与参数详解
读前参考:<性能测试工具Locust > 熟悉 Apache ab 工具的同学都知道,它是没有界面的,通过命令行执行. Locust 同样也提供的命令行运行,好处就是更节省客户端资源. 命 ...
随机推荐
- mongodb 更新操作
db.aaaa.update({},{$push:{money:{$each:[8,9,10],$slice:-4}}}) db.aaaa.update({},{$addToSet:{money:{$ ...
- [GO]方法集
指针变量的方法集 package main import "fmt" type Person struct { name string sex byte age int } fun ...
- 编写高质量代码改善C#程序的157个建议——建议125:避免用FCL的类型名称命名自己的类型
建议125:避免用FCL的类型名称命名自己的类型 试想过自己写一个Socket类型吗?如果没有,我们来尝试一下: public class Socket { //省略 } 把以上代码同某些其他工具类封 ...
- leetcode 有效的数独
判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...
- ASP.NET MVC实现一个用户只能登录一次 单用户登录
现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...
- zTree动态加载
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" ...
- SQL SERVER先判断视图是否存在然后再创建视图的语句
如果我们的语句为: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 IF NOT EXISTS(SELECT 1 FROM sys.views WHERE name='Report_I ...
- RabbitMq初探——php的一个demo
<?php /** * Created by PhpStorm. * Date: 2017/10/17 * Time: 16:21 */ class Rabbit { public functi ...
- WEB新手之serialize’s revenge
最后一道题. 这道题提示比较少,一点也不友好.F12也没有什么线索.无奈之下用御剑扫下后台,发现了一个叫robots的txt文件. 打开robots.txt文件,可以得到一段代码,如下图所示. 审查代 ...
- RDLC报表的相关技巧三(数量/金额的逐页累加)
数量/金额的逐页累加,不是当页小计. 核心步骤: 1.在Group1大组中加入小组Group2,2.Group2的组尾加入一个计算框 : =RunningValue(Fields!BaseAmount ...