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 WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决