一、Locust快速 入门

news2025/1/27 12:35:02

1 . 介绍

Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。

您可以在常规 Python 代码中定义用户的行为,而不是被困在 UI 或限制性领域特定语言中。

这使得 Locust 可以无限扩展并且对开发人员非常友好。

  • 用普通的旧 Python 编写测试场景

如果您希望您的用户循环、执行某些条件 行为或进行某些计算,您只需使用 Python 提供的常规编程结构。Locust 在其自己的 greenlet(轻量级进程/协程)中运行每个用户。这使您能够像普通(阻塞)Python 代码一样编写测试,而不必使用回调或其他一些机制。因为你的场景“只是 python”,所以你可以使用你的常规 IDE,并将你的测试作为常规代码进行版本控制。

  • 分布式和可扩展——支持数十万并发用户

Locust 使运行分布在多台机器上的负载测试变得容易。它是基于事件的(使用gevent),这使得单个进程可以处理数千个并发用户。虽然可能有其他工具能够在给定硬件上每秒处理更多请求,但每个 Locust 用户的低开销使其非常适合测试高度并发的工作负载。

  • 基于网络的用户界面

Locust 有一个用户友好的 Web 界面,可以实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有 UI 的情况下运行,使其易于用于 CI/CD 测试。

  • 可以测试任何系统

尽管 Locust 主要用于网站/服务,但它也可用于测试几乎任何系统或协议。只需 为您要测试的内容编写客户端,或探索社区创建的一些客户端。

  • 可入侵

Locust 很小而且非常灵活,我们打算保持这种状态。如果您想将报告数据发送到您喜欢的数据库和图形系统,包装对 REST API 的调用以处理系统的细节或运行完全自定义的加载模式,没有什么能阻止您!

2 .安装

# 安装
> pip install locust -i https://pypi.douban.com/simple

# 验证
> locust -V

3 .编写locustfile

import time
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)

    @task
    def hello_world(self):
        self.client.get("/hello")
        self.client.get("/world")

    @task(3)
    def view_items(self):
        for item_id in range(10):
            self.client.get(f"/item?id={item_id}", name="/item")
            time.sleep(1)

    def on_start(self):
        self.client.post("/login", json={"username":"foo", "password":"bar"})

3.1 必须继承User

​ 一个Locustfile只是一个普通的Python模块,它可以从其他文件或包中导入代码。

class QuickstartUser(HttpUser):

​ 在这里,我们为我们将要模拟的用户定义了一个类。它继承自HttpUser,给每个用户一个客户端属性,也就是HttpSession的一个实例,可以用来向我们要进行负载测试的目标系统发出HTTP请求。

当测试开始时,locust会给它模拟的每个用户创建一个这个类的实例,每个用户都会在自己的绿色gevent线程中开始运行。一个文件要成为有效的locustfile,必须至少包含一个继承自User的类


3.2 任务等待时间

wait_time = between(1, 5)

我们的类定义了一个wait_time,它将使模拟用户在每个任务(见下文)执行后等待1到5秒。更多信息见wait_time属性。


3.3 任务

用@task装饰的方法是你Locust文件的核心。

对于每一个正在运行的用户,Locust会创建一个greenlet(微线程),它将调用这些方法。

@task
def hello_world(self):
    self.client.get("/hello")
    self.client.get("/world")

@task(3)
def view_items(self):

​ 我们通过用@task装饰两个方法来声明两个任务,其中一个被赋予较高的权重(3)。

​ 当我们的QuickstartUser运行时,它将从声明的任务中挑选一个–在本例中是hello_world或view_items 并执行它。task任务是随机挑选的,但你可以给它们不同的权重*。

上面的配置将使Locust挑选view_items的可能性是hello_world的三倍

当一个任务执行完毕后,用户将在其等待时间内睡觉(在这种情况下是1到5秒)。在它的等待时间之后,它将挑选一个新的任务,并不断重复。

注意,只有用@task装饰的方法才会被选中,所以你可以用任何你喜欢的方式定义你自己的内部辅助方法。

self.client.get("/hello")

3.3.1 HTTP调用

self.client属性使我们可以进行HTTP调用,这些调用将被Locust记录下来。关于如何进行其他类型的请求、验证响应等的信息,请参见使用HTTP客户端。

注意

HttpUser不是一个真正的浏览器,因此不会解析一个HTML响应来加载资源或渲染页面。不过,它将保持对cookie的跟踪

@task(3)
def view_items(self):
    for item_id in range(10):
        self.client.get(f"/item?id={item_id}", name="/item")
        time.sleep(1)

3.3.2 请求分组

在view_items任务中,我们通过使用一个可变的查询参数加载10个不同的URL。为了不在Locust的统计中得到10个单独的条目–因为统计是根据URL分组的–我们使用名称参数将所有这些请求分组在一个名为"/item "的条目下。

3.3.3 任务初始化和清理

def on_start(self):
    self.client.post("/login", json={"username":"foo", "password":"bar"})

此外,我们还声明了一个on_start方法。当每个模拟用户开始时,将为他们调用这个名字的方法。更多信息见on_start和on_stop方法。


3.4 自动生成 locustfile

你可以使用har2locust来生成基于浏览器记录(HAR-file)的蝗虫文件。

它对不习惯编写自己的locustfile的初学者特别有用,但对更高级的使用情况也是高度可定制的。

注意:

har2locust仍处于测试阶段。它不一定能生成正确的蝗虫文件,而且它的界面在不同的版本之间可能会有变化。

更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449

在这里插入图片描述
更多教程,更多实战案例,请阅读:https://edu.csdn.net/course/detail/38449

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为OD机试】1038 - 学英语

文章目录一、题目🔸题目描述🔸输入输出🔸样例1二、代码参考作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x…

基于价值认同的需求侧电能共享分布式交易策略(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

惊喜开箱!品牌可以从 Ledger 引领的顶级体验之一中学到什么?

Ledger 是加密货币硬件钱包的领先供应商,它通过进入 The Sandbox 并创建游戏化体验来扩大其教育计划,从而在虚拟世界中掀起波澜。通过在这个令人兴奋的新空间打造自己的品牌,Ledger 正在接触更广泛的受众,并以有趣的方式与人们互动…

回收站清空了怎么恢复?快来get实用方法!

案例:回收站清空了怎么恢复? 【真的栓Q了,我刚点击回收站,不知道按错了什么,回收站被清空了,大家有什么方法可以恢复回收站里的文件吗?请大家给我出出主意吧!谢谢啦!】 …

不愧是比亚迪!

最近这段时间,因为我自己准备买车嘛,然后先后去试驾了比亚迪汉、小鹏P7i、蔚来ET5、智己LS7这几辆车,接下来想分4篇文章依次给大家分享一下这四个品牌的车试驾体验。比亚迪汉小鹏P7i蔚来ET5这四个品牌总共花了三天时间,也算是比较…

STC89C52定时器的简介

一、序言 针对于STC89C52RC而言,这个芯片内部包含了三个定时器——T0、T1和T2,他们的中断优先级分别是1、3和5。 怎么还有一个定时器2呢?博主也是今天整理这篇博客的时候,翻阅芯片手册才发现的。如果说,我们经常用的…

00后面试华为软件测试工程师,竭尽全力拿到15K。。。。。

不废话,直接重点 一般软件测试的面试分为三轮:笔试,HR面试,技术面试。 前两轮,根据不同企业,或有或无,但最后一个技术面试是企业了解你“行不行”的关键环节,每个企业都会有的。 在…

从C语言到C++(第一章_C++入门_中篇)缺省参数+函数重载+引用

目录 1.缺省参数 1.1缺省参数概念 1.2缺省参数的使用: 1.3缺省参数的分类 1.3.1 全缺省参数 1.3.2 半缺省参数 1.4缺省参数的应用场景 2. 函数重载 2.1函数重载的概念 2.2不支持函数重载的情况 3.引用 3.1引用的概念 3.2引用的特性 3.3引用做参数 3…

C++内存管理(new和delete)

目录 1. new/delete操作内置类型 2. new和delete操作自定义类型 3. operator new与operator delete函数 4 .new和delete的实现原理 1 .内置类型 2 .自定义类型 new的原理 delete的原理 new T[N]的原理 delete[]的原理 5. 定位new表达式(placement-new) 6. malloc/f…

【JavaScript】原生js实现省市区联动效果

😉博主:初映CY的前说(前端领域) ,📒本文核心:用原生js实现省市区联动 【前言】今日在复习省市县三级联动的时候,有点忘了原生的js应该怎么样处理省市县的联动,特此写下来再次复习下 目录⭐实现思路⭐思路转…

Node【六】内置模块 【url模块与queryString】

文章目录🌟前言🌟url 模块🌟 URL各部分说明🌟 将URL字符串转换为对象🌟 将对象格式化为URL字符串:url.format(urlObj)🌟 URL路径处理:url.resolve(from, to)🌟 queryStri…

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

背景 Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Da…

如何通过 kubernetes ingress 或者 istio ingressgateway 来暴露 TCP 的服务

点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!在 kubernetes 或 istio 应用中,一般都是通过 kubernetes ingress 或者 istio ingressgateway 来暴露 HTTP/HTTPS 的服务。但是在实际应用中,还是…

纷享销客张睿:快消数字化新时代,数“智”引领新增长

4月6日,在2023年(第八届)中国快消品创新大会主论坛上,纷享销客经营副总裁兼快消行业部总经理张睿作为嘉宾出席,并以《快消数字化新时代,数“智”引领新增长》为题发表了演讲。他有20余年的市场营销、销售及…

【蓝桥杯省赛真题37】Scratch冰上滑行 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch冰上滑行 一、题目要求 编程实现 二、案例分析 1、角色分析

JUC源码系列-ReentrantReadWriteLock

继承关系 ReadLock和WriteLock是ReentrantReadWriteLock的两个内部类,Lock的上锁和释放锁都是通过AQS来实现的。 AQS定义了独占模式的acquire()和release()方法,共享模式的acquireShared()和releaseShared()方法。 还定义了抽象方法tryAcquire()、tryA…

男生|女生漫画头像怎么制作,分享3种免费制作方法,不用求人

大家发现没有,最近特别流行卡通漫画头像!一些小伙伴们通过处理自己的照片,把照片制作成漫画头像,让照片看起来更有趣。那么,男生、女生漫画头像怎么制作呢?需要用到哪些工具?今天给大家分享3种免费制作漫画…

数据结构之线性表3

我们的目标: 1、了解线性结构的特点 掌握顺序表的定义、查找、插入和删除。 2、掌握链表的定义、创建、查找、插入和删除。 3、能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合。(持续更新) 前言 本章节内容主要介绍…

linux服务器怎么搭建网站

linux服务器怎么搭建网站 我是艾西,今天又是和想学习linux系统的小伙伴分享服务器系统操作小知识的时间。 这篇文章艾西会告诉大家怎么用linux系统搭建网站,网站是一个展示页面,用于商业的公告栏、门面以及用户容易记住的点,通过…

SpringSecurity中用户表单登录验证源码分析

SpringSecurity简单介绍 Spring Security所解决的问题就是安全访问控制,安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。通过学习SpringMVC我们得知只有进入Controller的请求才会走拦截器(Interceptor)…