Locust:简介和基本用法
我个人在性能测试工作中,负载生成工具使用的大多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。
这篇博客,简单介绍下locust的使用方法,仅供参考。。。
官方文档:Locust说明文档
一、认识Locust
1、定义
Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。
2、特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
3、locust与jmeter的区别
| 工具 | 区别 |
| jmeter | 需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限 |
| locust | 通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter |
PS:但locust的局限性在于,目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。
二、安装Locust
1、支持的python版本:2.7、3.4、3.5、3.6;
2、Windows系统安装locust
①、直接通过 pip install locustio 命令安装;
②、通过为pyzmq、gevent和greenlet安装预先构建的二进制包,然后在这里找到非官方的预制包,下载.whl文件后,使用 pip install name-of-file.whl 命令安装;
安装成功后可以输入 pip show locust 命令查看是否安装成功,以及通过 locust -help 命令查看帮助信息。
PS:运行大规模测试时,建议在Linux机器上执行此操作,因为gevent在Windows下的性能很差。
三、一个简单的示例
locust的脚本里,模拟负载的请求和python的requests库使用方法基本一样,示例如下:
# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning) class MyBlogs(TaskSet):
# 访问我的博客首页
@task(1)
def get_blog(self):
# 定义请求头
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"} req = self.client.get("/imyalost", headers=header, verify=False)
if req.status_code == 200:
print("success")
else:
print("fails") class websitUser(HttpLocust):
task_set = MyBlogs
min_wait = 3000 # 单位为毫秒
max_wait = 6000 # 单位为毫秒 if __name__ == "__main__":
import os
os.system("locust -f locusttest.py --host=https://www.cnblogs.com")
脚本说明:
新建一个类MyBlogs(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息;
self.client调用get和post方法,和requests一样;
@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
WebsiteUser()类用于设置生成负载的基本属性:
| 属性 | 说明 |
| task_set | 指向定义了用户行为的类 |
| min_wait | 模拟负载的任务之间执行时的最小等待时间,单位为毫秒 |
| max_wait | 模拟负载的任务之间执行时的最大等待时间,单位为毫秒 |
PS:默认情况下,时间是在min_wait和max_wait之间随机选择,但是可以通过将wait_function设置为任意函数来使用任何用户定义的时间分布。
四、启动Locust
1、如果启动的locust文件名为locustfile.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:
locust --host=https://www.cnblogs.com
2、如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:
locust -f testscript/locusttest.py --host=https://www.cnblogs.com
3、如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :
locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com
4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:
locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com
5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com
6、启动locust文件成功后,编译器控制台会显示如下信息:
[2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8
PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;
五、locust的UI界面
1、启动界面

Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本
2、测试结果界面
PS:点击STOP可以停止locust脚本运行:

Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
3、各模块说明

New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
Statistics:类似于jmeter中Listen的聚合报告;
Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
Failures:失败请求的展示界面;
Exceptions:异常请求的展示界面;
Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;
以上即为locust的介绍和简单使用以及说明,更多详细的内容请参考官方文档。。。
Locust:简介和基本用法的更多相关文章
- GNU Binutils简介及基本用法
[时间:2017-06] [状态:Open] [关键词:GNU, binutils, as, ld, ar, 基础工具,linux,链接器,汇编器] 0 简介 GNU Binary Utilities ...
- json简介及JsonCpp用法
[时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...
- 【SqlServer】T-SQL的简介及基本用法
一.T-SQL概述 SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL.T-SQL与PL/SQL不同,并没有固定的程序结构.T-SQL包括以下4个部分: DD ...
- 压力测试工具ab,wrk,locust简介
ab 无疑是目前最常见的压力测试工具.其典型用法如下: shell> ab -k -c 100 -t 10 http://domain/path 其中,参数「c」表示的是并发, 参数「t」表示的 ...
- ETCD 简介及基本用法
ETCD 项目地址 ETCD 官方文档 1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. 特点 简单:安装配置使用简单 ...
- 【c++】标准模板库STL入门简介与常见用法
一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...
- postman简介及基本用法
从分层测试角度来说,接口测试是相对来说性价比最高的,且作为功能测试进阶的必备技能,接口测试值得大家都去学习掌握. 工欲善其事,必先利其器,好的工具能更好的帮助工程师更高效率的完成工作. 常见的接口测试 ...
- 测开之路七十二:性能测试工具之locust简介
locust官网:https://locust.io/ locust安装(不支持python3.7):pip install locustio 或者pycharm安装 官网给出的样例 根据官网代码 ...
- Golang | 简介channel常见用法,完成goroutin通信
今天是golang专题的第14篇文章,大家可以点击上方的专辑回顾之前的内容. 今天我们来看看golang当中另一个很重要的概念--信道.我们之前介绍goroutine的时候曾经提过一个问题,当我们启动 ...
随机推荐
- leetcode — subsets-ii
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常
异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述 ...
- [React] react+redux+router+webpack+antd环境搭建一版
好久之前搭建的一个react执行环境,受历史影响是webpack3.10.0和webpack-dev-server2.7.1的环境,新项目准备用webpack4重新弄弄了,旧的记录就合并发布了(在没有 ...
- Redis数据类型使用场景及有序集合SortedSet底层实现详解
Redis常用数据类型有字符串String.字典dict.列表List.集合Set.有序集合SortedSet,本文将简单介绍各数据类型及其使用场景,并重点剖析有序集合SortedSet的实现. Li ...
- VS2017安装过程中【工作负载】选择安装
Visual Studio 2017安装和12.13.15安装过程一样的,只是17安装的时候 选择的[工作负载]不同了,小编安装17的目的是为了安装“.Net Core跨平台开发” 这个模块,当然,其 ...
- npm安装github包的方式
直接在npm仓库进行安装 npm install kiana-js --save 直接利用用户名和仓库名进行安装 npm install easterCat/kiana-js 也可以在前面加上 git ...
- Linux中more和less命令用法
一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...
- OO Homework One Notes
系数/指数 过大 溢出(True) eg. - +999999999454554999999 * x ^ -85858554545454545548585858858 x前存在两个符号,与x有空格分离 ...
- Web前端 Web前端和Web后端的区分
一.绪论 1. 前台:呈现给用户的视觉和基本的操作. 后台:用户浏览网页时,我们看不见的后台数据跑动.后台包括前端.后端. 前端:对应我们写的html.css.javascript 等网页语言作用在前 ...
- Kruskal重构树入门
这个知识点好像咕咕咕了好长了..趁还没退役赶紧补一下吧.. 讲的非常简略,十分抱歉.. 前置知识 Kruskal算法 一定的数据结构基础(如主席树) Kruskal重构树 直接bb好像不是很好讲,那就 ...