Python性能测试框架:Locust实战教程

python,locust · 浏览次数 : 13

小编点评

**认识Locust** Locust是一个易于上手的分布式用户负载测试工具,主要用于对网站(或其他系统)进行负载测试,以确定系统可以处理多少个并发用户。它得名于“蝗虫”,意味着在测试期间,会有一大群蝗虫攻击您的网站。Locust允许用户通过Web UI实时监控负载测试过程,并且可以使用Python编写测试方案,具有很高的灵活性。 **Locust运行原理** Locust基于事件运行,可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序不同,它不使用回调,而是通过gevent使用轻量级进程。这使得Locust在模拟高并发请求方面具有很大的优势。 **Locust的特点** 1. 用Python编写测试方案,无需在UI界面上点击,只需编写代码。 2. 分布式和可扩展,支持在多台计算机上运行负载测试。 3. 统计结果基于Web界面,便于实时查看和展示。 4. 可以测试任何网页/应用/系统,只需编写测试方案并放置“蝗虫”进行测试。 **测试工具比较** Locust与LoadRunner和Jmeter等商业和开源性能测试工具相比,具有以下优势: - 采用纯Python编程语言,HTTP请求基于Requests库,易于使用和扩展。 - 利用协程(gevent)机制,避免了系统级资源调度,提高了并发能力。 **环境安装** 1. 下载并安装Python 3.6+解释器。 2. 配置Python环境变量,将Python根目录和Scripts路径添加到环境变量Path中。 3. 使用pip安装locustio库及其依赖库。 **如何使用Locust** 使用Locust主要包括以下几个步骤: 1. 创建一个名为HttpLocust的类,继承自Locust类。 2. 在HttpLocust类中定义task_set属性,指向定义的用户行为类。 3. 设置host属性为要加载的域名(URL前缀)。 4. 设置wait_time属性,用于发送Http请求时的等待时间。 5. 使用@task装饰器标识测试任务,并设置权重。 6. 使用@seq_task装饰器指定接口的执行顺序。 7. 实现setup、teardown、on_start和on_stop方法。 8. 选择合适的启动方式,如直接启动、无web页面启动、分布式启动等。 **总结** Locust是一个强大的分布式用户负载测试工具,具有灵活的测试方案编写、高效的并发机制和良好的可扩展性。虽然它在测试过程的监控和结果展示方面可能不如Jmeter全面和详细,但对于希望使用Python进行性能测试的用户来说,它是一个很好的选择。

正文

01认识Locust

 

 

Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思:作者的想法是在测试期间,放一大群 蝗虫 攻击您的网站。当然事先是可以用 Locust 定义每个蝗虫(或测试用户)的行为,并且通过 Web UI 实时监视围攻过程。

 

locust运行原理

Locust 的运行原理是完全基于事件运行的,因此可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调(比如 Nodejs 就是属于回调,Locust 不使用这种的逻辑)。相反,它通过 gevent 使用轻量级进程。测试您站点的每个蝗虫实际上都在其自己的进程中运行

 

Locust的特点

 

1、用Python编写测试方案 不需要在UI界面上点击,只需要正常编写代码即可,灵活性比较强

2、分布式&可扩展 Locust 支持分布在多台计算机上的运行负载测试(可以多台机器并行开搞)。

3、统计结果基于Web界面 Locust 有一个简单的用户界面,可实时显示相关的测试详细信息,并且统计结果界面是基于网页的,而网页是天生跨平台的,所以 Locust 是跨平台且易于扩展的

4、可以测试任何网页/应用/系统 只需用 python 编写想要测试的方案,然后放”蝗虫”去怼需要测试的项目就可以了,非常简单!

 

 

02 测试工具哪个好

 

LoadRunner

是非常有名的商业性能测试工具,功能非常强大。使用也比较复杂,但收费贼贵

 

Jmeter

同样是非常有名的开源性能测试工具,功能也很完善。可以当做接口测试工具来测试接口,但同时它也是一个标准的性能测试工具

 

Locust

功能上虽然不如LoadRunner及Jmeter丰富,但其也有不少优点。Locust 完全基本 Python 编程语言并且 HTTP 请求完全基于 Requests 库

 

LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。Locust 的并发机制摒弃了进程和线程,采用协程(gevent)的机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。

 

03 环境安装

 

Python环境配置

(1)首先去Python官网下载Python3.6+版本解释器

(2)安装解释器并配置环境变量(将python的根目录以及Scripts路径配置到环境变量Path下面)

(3)打开cmd窗口,分别输入python、pip命令并回车,如果没有报错,则说明Python环境配置成功

 

Locust环境配置

(1)打开cmd窗口,输入pip install locustio==0.14.6 并回车,此时系统会自动下载locust库以及部分依赖库

PS:locust 目前有2个大版本,0和1的版本,两个版本之间语法差异比较大,安装1*版本,直接pip install locust 即可

(2)安装成功后验证:在cmd窗口中,输入python,进入python开发环境,然后输入import locust,如果没有报错,则说明locust安装成功

 

04 如何使用

 

Locust类

  • HttpLocust类 继承了Locust类,表示将要生成的每一个虚拟的HTTP用户,用来发送请求到进行负载测试的系统。

  • task_set 属性 该 task_set 属性指向定义的用户行为的类

  • host属性 host属性是要加载的域名(URL 前缀,例如http://xxxxxx)

  • wait_time 属性 用于发送Http请求时,虚拟用户需要等待的时间,等待时间是一个区间范围。单位为毫秒,等待时间在min_waitmax_wait之间随机选择

 

TaskSequence 类

  • TaskSequence 类

    TaskSequence 类是 TaskSet,但其任务将按顺序执行。

  • @task装饰器

    用于标识测试任务,并且可以通过task装饰器设置权重用于执行任务的执行率

  • @seq_task装饰器

    用于指定接口的执行顺序。可以把@task装饰器和@seq_task装饰器一起组合使用

 

初始化方法

1、setup 和 teardown方法 setup 和 teardown 都是只能运行一次的方法。在任务开始运行之前运行setup,而在所有任务完成并且蝗虫退出后运行 teardown;这使您能够在任务开始运行之前做一些准备工作(比如创建数据库,或者打印日志 等等),并在蝗虫退出之前进行清理。

2、on_start 和 on_stop 方法 每个虚拟用户执行操作时运行on_start方法,退出时执行on_stop方法

3、初始化方法的执行顺序 setup > on_start > on_stop > teardown

 

常用3种启动方式

直接启动

 locust -f stock_center.py (stock_center.py为执行脚本,可在编译器中直接运行该脚本) 

无web页面启动 

locust -f stock_center.py --no-web -c 200 -r 20 -t 1m

(–no-web 代表不需要启动UI页面

-c 代表需要并发的用户数

-r 代表每秒并发的用户数

-t 代表需要运行的时间)

 

分布式启动 

locust -f stock_center.py --master # 指定当前机器为master主机

locust -f stock_center.py --slave --master-host=10.xxx.xxx.xxx # 指定当前机器为从机并指向对应master主机

 

启动页面

 

Number of total users simulate: 设置需要并发的总人数

Hatch rate(users spawned/second): 每秒启动的虚拟用户数

Start swarming: 执行locust脚本

 

 

Type: 请求类型,即接口的请求方法

Name: 接口请求路径

Requests: 当前已完成的请求数量

Fails: 当前失败的数量

Median: 响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒

Average: 平均响应时间,单位为毫秒

Min: 最小响应时间,单位为毫秒

Max: 最大响应时间,单位为毫秒

Average Size: 平均请求的数据量, 单位为字节

Current RPS: 每秒能处理的请求数目

 

各模块说明

 

  • New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;

  • Statistics:类似于jmeter中Listen的聚合报告;

  • Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、 不同时间的虚拟用户数;

  • Failures:失败请求的展示界面;

  • Exceptions:异常请求的展示界面;

  • Download Data:测试数据下载模块, 提供四种类型的CSV格式的下载, 分别是:Statistics、responsetime、failures、exceptions;

 

05 Locust的总结

 

局限:

locust的局限性在于:目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。

 

优势:

纯脚本形式,并且HTTP请求完全基于Requests库。用过Requests的都知道,这个库非常简洁易用,但功能十分强大

 

另外一点就是并发机制了。Locust的并发机制摒弃了进程和线程,采用协程(gevent)的机制。避免了系统级资源调度,由此大幅提高了性能。正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。

 

 

与Python性能测试框架:Locust实战教程相似的内容:

Python性能测试框架:Locust实战教程

01认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思:作者的想法是在测试期间,放一大群 蝗虫 攻击您的网站。当然事先是可以用 Locust 定义每个蝗虫(或测试用

python轻量级性能工具-Locust

Locust基于python的协程机制,打破了线程进程的限制,可以能够在一台测试机上跑高并发 性能测试基础 1.快慢:衡量系统的处理效率:响应时间 2.多少:衡量系统的处理能力:单位时间内能处理多少个事务(tps) 性能测试根据测试需求最常见的分为下面三类 1 负载测试load testing 不断

基于k6和python进行自动化性能测试

摘要:在性能测试中,达到相应的性能指标对于一个软件来说十分重要,在本文中,将介绍一种现代化性能测试工具k6。 本文分享自华为云社区《基于k6和python进行自动化性能测试》,作者: 风做了云的梦。 当我们开发完成一个应用程序时,往往需要对其进行性能测试,以帮助我们更好的优化程序以及发现程序中的一些

[转帖]专注于GOLANG、PYTHON、DB、CLUSTER 记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 rfyiamcool2016年6月26日 0 Comments 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到

[转帖]Jmeter笔记:使用Jmeter向kafka发送消息

https://www.cnblogs.com/daydayup-lin/p/14124816.html 日常工作中有时候需要向kafka中发送消息来测试功能或者性能,这时候我们怎么办呢?我之前是自己写个简单的python脚本来模拟发送消息的,其实用Jmeter来实现也比较简单方便。 1、我们必须有

[转帖]python 性能优化监控工具_Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

Python:对程序做性能分析及计时统计

如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了。由于我用的是Mac系统,和Linux系统的输出可能有不同,不过关键都是这三个时间:user: 运行用户态代码所花费的时间,也即CPU实际用于执行该进程的时间,其他进程和进程阻塞的时间不计入此数字;system: 在内核中执行系统调用(如I/O调用)所花费的CPU时间。total(Linux下应该是real):即挂钟时间

基于Python的性能优化

通过多线程、协程和多进程可以显著提升程序的性能。多线程适用于I/O密集型任务,尽管受限于Python的GIL,但能在I/O等待期间提高并发性。协程则更为轻量和高效,特别适合处理大量异步I/O操作。

基于Python的性能分析

1、什么是性能分析 字面意思就是对程序的性能,从用户角度出发就是运行的速度,占用的内存。 通过对以上情况的分析,来决定程序的哪部份能被优化。提高程序的速度以及内存的使用效率。 首先我们要弄清楚造成时间方面性能低的原因有哪些 沉重的I/O操作,比如读取分析大文件,长时间执行数据库查询,调用外部服务例如

[转帖]一次python服务的性能优化经历

https://juejin.cn/post/7208708762265616421 问题背景: ​ 在我们的业务中,有一些推荐的场景会需要走到集团研究院的算法推荐服务,对一些用户进行个性化的课件推荐或者作者推荐,这个业务场景已经很久了,但是一直有一个很难解决的问题困扰着我们,就是我们调用研究院的接