Locust压测框架入门

2024-04-17 07:58
文章标签 入门 压测 框架 locust

本文主要是介绍Locust压测框架入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先客套的来介绍一些Locust是啥:


Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。

在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。

Locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的。相反,它通过gevent使用轻量级的进程。每一个locust测试你的网站时,实际上是真实的在内部运行它自己的进程(或greenlet,准确的说)。这样就允许你不使用复杂的回调方法,而是使用Python编写复杂的场景。


关于Locust:

1、locust作为一款性能测试工具,没有单独的ui界面,可以说是python下的一些库的集成

locust完全基于python作为编程语言,采用pure python描述测试脚本,其中的http请求也是完全基于Requests库,除了HTTP/HTTPS协议,locust也可以测其他协议的系统,只需要采用python调用对应的库进行请求描述即可,可以说python对应的库还是非常齐全的。

2、与jmeter相比较而言,locust更加的轻量化,采用的是不同于jmeter中进程和线程的处理机制(协程【微线程】),有效避免了系统的资源调度,由此可以大幅度的提高单击系统的并发能力

3、Github地址:

https://github.com/locustio/locust

注:如果想查看python下依赖了哪些库的话,可以进入github,点击setup.py进入查看

上述标红的地方就是依赖的第三方库及支持版本(详细的介绍见下方),安装这些库的时候也应遵循其显示的版本号,如果与当前支持的版本号不一致或者小于当前版本号的时候就会安装失败。

4、locust组成模块(所依赖的库)【gevent】是python下实现协程的一个第三方库,能够使系统获取极高的并发性能(locust基础模块)


简而言之,它的特点就是协程,web管理工具,超级好用。


第一步,安装

依然是老伙伴pip工具(完美安装依赖)

pip install Locust

640?wx_fmt=png

Locust有六个依赖的python模块

1.gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;

2.flask:Python的一个web开发框架,和django相当;

3.requests:支持http/https访问的库;

4.msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;

5.six:提供了一些简单的工具封装Python2和Python3 之间的差异;

6.pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)



安装结束了之后我们就开启Locust之旅了。


第二步,使用

如何快速的创建一个Locust Demo。

from locust import HttpLocust, TaskSet, task


class UserBehavior(TaskSet):
"Locust任务集,定义每个lucost的行为"
@task(1) # 任务的权重为1,如果有多个任务,可以将权重值定义成不同的值,
def get_root(self):
"模拟发送数据"
response = self.client.get('/Hello', name='get_root')
if not response.ok:
print(response.text)
response.failure('Got wrong response')


class TestLocust(HttpLocust):
"""自定义Locust类,可以设置Locust的参数。"""
task_set = UserBehavior
host = "https://www.baidu.com" # 被测服务器地址

min_wait = 5000

    # 最小等待时间,即至少等待多少秒后Locust选择执行一个任务。

max_wait = 9000

    # 最大等待时间,即至多等待多少秒后Locust选择执行一个任务。


首先需要导入locust模块里面的三个方法,HttpLocust,TaskSet,task


1、创建一个类继承自TaskSet,表示在这个类里面都是Locust的任务,这个类就算Loucst的任务集:


2、创建任务,创建任务其实就算定义一个方法,需要注意的是,这个方法上面多了一个task的装饰器,这个装饰器是用来标是定义的这个方法会被locust识别成它需要做的任务,task装饰器后面会有参数,如果执行单任务的时候,后面这个权重随便写上什么数字都无所谓,这个数字其实就是一个权重值,但是如果有多个任务的情况下,这个时候权重值就会起作用了。

来吃个栗子:

@task(1)
def index1(self):
r=self.client.get('/test/index.html')
print(r.text)

@task(2)
def search1(self):
r=self.client.get('/test/search.html')
print(r.text)

如有index1和search2分别设置权重1、2,如果测试时指定9个模拟用户数,那么会有3个模拟用户数执行index1任务,有6个模拟用户数执行search2任务。

简而言之可以把这个权重理解为执行次数的多少,数值越大,执行的频率就越高。


3、进入测试阶段,需要创建测试类继承自HttpLocust。

在这个类中只需要将刚刚创建的任务集类实例化,并且提供一个服务器的地址就可以进行使用了。

这里还有两个设置参数介绍一下:

min_wait : 最小等待时间,即至少等待多少秒后Locust选择执行一个任务。

max_wait :最大等待时间,即最多等待多少秒后Locust选择执行一个任务。



编写完demo后,我们就可以运行代码了。

运行的时候并不是直接运行,需要在终端键入这样的指令:

locust - f locu.py --logfile = locustfile.log

其中locu.py就是你刚刚编写的demo文件,--logfile就是log日志生成的地方。


我们运行一下代码:

640?wx_fmt=png

之后就可以打开locust了

在浏览器中输入地址:

http://localhost:8089/

你会看到这样的页面

640?wx_fmt=png

输入两组数据,第一个是你需要访问的最大总数,第二个是你在同一时间访问的最大数量(并发)

640?wx_fmt=png


输入完之后就进入测试了:

640?wx_fmt=png


640?wx_fmt=png


我们看图介绍一下数据:

Type                    访问类型
Name 任务名(python中定义的方法名)
Requests 请求的总次数
Fails 失败的次数
Median (ms) 中间数耗时
Average (ms) 平均耗时
Min (ms) 最低耗时
Max (ms) 最大耗时
Average size (bytes) 平均耗时
Current RPS 每秒钟处理的访问的次数



这就是locust最基本的使用方法和用途了!



640?wx_fmt=gif

"Follow It"


这篇关于Locust压测框架入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911221

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1