python性能测试工具locust
1.概述:
1.我们对目前比较流行的几款压测工具进行了调研。Jmeter与LoadRunner基于多线程实现并发,多线程由操作系统决定,由于上下文切换频繁、内核调度频繁,单台机器很难产生大量线程并发。以多线程方式运行会有很多线程切换的开销,故而考虑多协程方式实现,
Jmeter由Java语言编写,并不支持协程机制。Python语言通过async/await的方式实现协程,而Locust正是基于python。
2..Locust 完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过 gevent 使用轻量级协程。这允许您用 Python 编写非常有表现力的场景,而不用回调使代码复杂化。
2.压测工具对比:
当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢?

备注:服务端数据可以通过nmon_analyser或者Grafana监控
3.优缺点说明:
3.1jmeter采用线程并发机制,但其主要依靠增加线程数提高并发量,当单机模拟数以千计的并发用户时,对于CPU和内存的消耗比较大,jmeter本身具有以下优点和缺点:
优点:①界面可视化操作,可以使用录制脚本方式对较为复杂的用户流建模,还可以创建断言来验证测试行为是否通过;
②表格、图形、结果树等多类可视化数据分析和报告输出;
③支持http、ftp、tcp等多种协议类型测试;
④支持分布式压力测试,但对于上万的用户并发测试需要多台测试机支持,资源要求比较大;
⑤可以用于测试固定吞吐量下的系统性能,例如在100QPS(QPS:每秒查询率)下系统的响应时间和资源消耗;
缺点:①jmeter的GUI模式消耗资源较大,当需要测试高负载时,需要先使用GUI工具来生成XML测试计划,然后在非GUI模式下导入测试计划运行测试,并且关闭不需要的侦听器(收集数据与展示测量的组件),因为侦听器也会消耗掉本用于生成负载的大量资源。测试结束后后,需要将原始结果数据导入GUI以才能查看结果。
3.2.locust是一个的简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。
优点:①locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)单台负载机可模拟的负载数远超jmeter;
②相比jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试;
③不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等);
④locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求;
缺点:①同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多;
4.Locust的指标体系:
(1)响应时间
反应系统处理效率指标,从开始到完成某项工作所需要时间的度量,响应时间通常随着负载的增加而增加;
(2)吞吐率(QPS)
(3)事务处理能力(TPS在locust中为RPS)
##___________________________Locust环境搭建_________________________________________________________________________
1.安装locust:
pip3 install locust
检查是否安装成功,执行命令:locust --v
2.脚本实例:
#!/usr/bin/env python
# -*- coding: utf-8 -*- from locust import HttpUser, TaskSet, task
# 定义用户行为类
class UserBehavior(TaskSet):
@task # 任务项
def test_login(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"}
url = '/login.htm'
res = self.client.get(url,headers=header, verify=False)
#断言方式一
#assert res.status_code == 200
#断言方式二
if res.status_code == 200:
print('登陆成功!')
else:
print('登陆失败!') class WebSiteUser(HttpUser):
tasks = [UserBehavior]
#host = "https://www.cnblogs.com"
max_wait = 5000
min_wait = 1000 if __name__ == "__main__":
import os
os.system("locust -f test.py --host=https://www.cnblogs.com")#这样写可以直接运行文件,也可以命令调用文件
多个接口测试脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*- from locust import HttpUser,TaskSet,task class UserBehavior(TaskSet):
@task
def chen_users(self):
headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}##设置请求Headers头部
#请求输入参数
p = {"game_id":"20210708110"}
url='/subcontract'
res=self.client.post(url=url,headers=headers,params=p)
if res.status_code == 200:
print('登陆成功!')
else:
print('登陆失败!') @task(1)
def test_groups(self):
headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}##设置请求Headers头部
res=self.client.get("/getcontract", headers= headers)
if res.status_code == 200:
print('test登陆成功!')
else:
print('test登陆失败!') class WebsiteUser(HttpUser):
tasks = [UserBehavior]
min_wait = 3000
max_wait = 6000 if __name__ == "__main__":
import os
os.system("locust -f test.py --host=http://106.55.29.87:8000")
UserBehavior 类继承TaskSet 类,用于描述用户行为。
@task约定该方法为一个事件,一部分的数字表示请求比例,上面的比例为2:1默认1:1test_users()方法表示一个用户行为,这里是请求user接口。test_groups()方法表示请求group接口。client.get()用于指定请求的路径。
网站用户类用于设置性能测试。
task_set:一个定义的用户行为类。min_wait:执行事务之间用户等待时间的下界(单位:毫秒)。max_wait:执行事务之间用户等待时间的上界(单位:毫秒)。
3.执行测试:
web模式:
使用命令行启动测试: locust -f test.py --host=https://www.cnblogs.com .................................................... .......普通启动
locust -f E:\test\dalan_sparrow\sparrow\test.py --host=https://www.cnblogs.com --web-port 8091 ...............启动时指定端口
如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com
如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :
locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com
no web 模式:
1. locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m
2. locust -f D:\PycharmProjects\UItest\locust_scripts\locust_test2.py --no-web -c 1 -r 1 -t 10s --csv=d:
启动参数:
--no-web 表示不使用Web界面运行测试。
-c 设置虚拟用户数。
-r 设置每秒启动虚拟用户数。
-t 设置设置运行时间。
--csv运行结果保存目录
备注:
1.Locust no-web模式执行命令提示locust: error: unrecognized arguments: -no-web -c 的问题
解决:将命令参数--no-web 更改为 --headless,将命令中指定用户并发数的参数 -c 改为 -u即可。
执行测试后在浏览器打开localhost:8089可以看到如下页面:

Number of users to simulate:设置模拟用户数。
Hatch rate(users spawned/second):每秒产生(启动)的虚拟用户数。
单击“Start swarming”按钮,开始运行性能测试
运行之后可以看到主界面如下:

性能测试参数如下。
Type:请求的类型,例如GET/POST。
Name:请求的路径。
request:当前请求的数量。
fails:当前请求失败的数量。
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均值,单位毫秒,所有请求的平均响应时间。
Min:请求的最小服务器响应时间,单位毫秒。
Max:请求的最大服务器响应时间,单位毫秒。
Content Size:单个请求的大小,单位字节。
reqs/sec:每秒钟请求的个数。即QPS
点击Charts菜单可以查看性能图表
图表含义如下:
Total Request per Second :每秒的请求数
Average Response Time: 平均响应时间
Number of Users: 用户数
相关连接:
https://blog.csdn.net/weixin_38320674/article/details/108505688 ....................QPS、TPS、并发用户数、吞吐量关系
https://zhuanlan.zhihu.com/p/282824807 ........................locust代码案例
https://www.cnblogs.com/shenh/p/12424990.html ....................locust环境流程(包含分布式)
https://www.cnblogs.com/imyalost/p/9758189.html ......................locust基本环境流程
https://www.cnblogs.com/yoyoketang/p/9642242.html .................先登录场景案例
https://testerhome.com/topics/12712 .............................................Locust 简单例子
https://mp.weixin.qq.com/s?__biz=MzAxNjg3MTU4OQ==&mid=2247484282&idx=1&sn=f529a433410dde29ffb86efd792956aa ................locust汇总(包含no web模式)
https://testerhome.com/topics/24873 .......................................重新定义 Locust 的测试报告_ grafana性能监控平台
https://mp.weixin.qq.com/s/tIVdUfQlCnsKVC0VMLynLQ .............从0到1开展性能测试必备的性能测试要点!
https://mp.weixin.qq.com/s/lj7Oih1vswAXerk7lpz5ag ...................聊聊全链路压测 ,,服务改造
https://www.modb.pro/db/130338 ...............................................全链路压测之影子库介绍(影子库是做数据隔离的)
python性能测试工具locust的更多相关文章
- 性能测试工具Locust,一个开源性能测试工具
性能测试工具Locust,一个开源性能测试工具使用Python代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统.1.它与目前主流的LoadRunner和Jmeter玩法都不一样.2.它完全 ...
- 基于python的性能测试工具–locust
现在有很多的性能测试工具,比如说我们熟悉的loadrunner.jmeter.ab.webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写 ...
- Python技术栈性能测试工具Locust入门
Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就可见一斑: 截止文章写 ...
- 性能测试工具Locust
An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...
- 性能测试工具Locust的使用
一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...
- 开源性能测试工具Locust使用篇(三)
脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...
- 开源性能测试工具Locust使用篇(二)
那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...
- 性能测试工具Locust的介绍和使用
内容来自网络 https://www.w3xue.com/exp/article/20191/16707.html https://blog.csdn.net/qq_36255988/article/ ...
- 性能测试进阶:(一)性能测试工具Locust
An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...
- 好用的python性能测试神器–Locust
原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...
随机推荐
- Golang HTTP编程及源码解析
1.网络基础 基本TCP客户-服务器程序Socket编程流程如如下图所示. TCP服务器绑定到特定端口并阻塞监听客户端端连接, TCP客户端则通过IP+端口向服务器发起请求,客户-服务器建立连接之后就 ...
- 用C++ 弹奏武侠音乐:沧海一声笑
前言: 参照网路代码,用编程语言来弹奏一首音乐,搞点轻松的 原文:点击此处 完整代码: 以下为Visual Stuido 2022测试可用,控制台程序.运行之后,会自动弹奏沧海一声笑,并且出现歌词.主 ...
- 化学式latex语法
$2 CO_2 \stackrel{光}{\underset{\text{催化剂}}{\longrightarrow}}2 Fe + 3 CO_2$ $\ce{CO2}$ $\ce{CU2+}$ $\ ...
- windows pwn(一)
前言 前几天因为看CS shellcode装了一个win10虚拟机,然后正好因为逆向课老师要装一系列工具.于是就想起来之前一直想看的windows pwn,就顺便装了一下相关工具并且入门了一下. 工具 ...
- 剖析flutter_download_manager学习如何做下载管理,暂停和取消
前言 内容类应用中图片或文件下载,一般应用中应用更新和升级,这些都是经典的下载场景.下载是项目中基础且重要的模块. 从代码逻辑复用性和人力成本考虑,一直想实现一个纯Dart实现的下载库,作为技术储备. ...
- LeetCode-593 有效的正方形
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/valid-square 题目描述 给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个 ...
- LeetCode-1705 吃苹果的最大数目
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-eaten-apples 题目描述 有一棵特殊的苹果树,一连 ...
- django搭建简易blog
目录 下载安装django 创建一个django项目 创建一个django应用 models.py urls.py views.py admin.py 配置应用到项目下 路由设置urls.py set ...
- mysql存储过程游标中途自动退出
1.当在游标循环过程中select的结果集如果为空,就会触发游标continue handler for not found 提前将done置为1,导致提前退出游标. 2.游标循环中出现 select ...
- 关于paddleocr2.6 布局分析的踩坑总结(一)
8月24日paddleocr发布了2.6.0,之前使用过2.5版本的布局分析,整体比较好用.近期就尝试了一下paddleocr的新版本,记录一下尝鲜经历.2.6版本的公告中指出,布局分析模型缩小了95 ...
