Python中使用locust做性能测试时,方法初始化与权重比设置

本文档详细介绍了使用Locust进行接口性能测试的方法,包括如何在初始化阶段执行预设任务,如获取A接口的响应值供B接口使用。通过on_start、on_stop方法实现测试流程控制,以及利用任务权重调整执行频率。此外,还展示了两种设置任务权重的方式,一种是通过task装饰器,另一种是使用tasks字典,确保任务执行比例符合预期。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一,使用locust做性能测试时,初始化方法介绍

使用locust做接口性能测试时,经常会有B接口需要A接口的传参,此时需要在初始化中先执行A接口获取响应值,再传给B接口
参考下面的例子, on_start 方法是初始化方法,One,Two两个方法是性能测试方法,实际执行时会先执行 on_start ,中间执行One,Two,测试结束执行 on_stop
为了测试输出内容,方法中只有写入文档操作,具体数据可以查看同目录的 Report.csv 文件

#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")

    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)

class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10



'''
点击STOP,会停止测试,并调用所有当前执行的TaskSet的on_stop,但不会调用teardown函数
ctrl +c,表示停止locust运行,此时会调用TaskSet teardown # 停止locust运行时执行,Locust teardown  # 停止locust运行时执行,(而不会调用TaskSet的on_stop,点击STOP,会停止测试,并调用所有当前执行的TaskSet的on_stop,但不会调用teardown函数)

stop_timeout:Locust停止的秒数,如果为None,将不停止一直执行任务,单位为s秒
-H:指定测试的主机地址(注:会覆盖Locust类指定的主机地址)
-f:指定测试脚本地址(注:脚本中必须包含一个Locust的衍生类)
--no-web:不启动web网页,而是直接开始运行测试,需提供属性-c和-r
-c:并发的用户数,与--no-web一起使用
-r:每秒启动的用户数,与--no-web一起使用
-t:运行时间(单位:秒),与--no-web一起使用
-L:日志级别,默认为INFO
调试命令:locust -f **.py --no-web -c 1 -t 1
运行命令:locust -f **.py


TaskSet on_start  # 每一次开始一个任务时执行
TaskSet tasks…
TaskSet on_stop   # 点击页面stop时,当前所有在执行中的TaskSet执行

'''

二,使用locust做性能测试时,权重介绍

  1. 使用task标签的方式
    还是拿上面的代码作为例子,One方法的权重为 80%,Two方法的权重为 20%,分别在方法的装饰器中设置相应的比例,最后查看文档输出结果,与设置的比例一致
#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")

    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task(4)
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task(1)
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)

class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10

在这里插入图片描述
2. 以tasks字典的方式设置权重
代码如下,最后查看报告文件,设置项同样生效

#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")


    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)
    tasks = {one:4,two:1}


class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 首先,用户的问题是基于之前的引用内容,他们想获取使用Locust进行服务器压力测试的方法。引用提供了关于Locust的信息,包括其介绍、安装、在Kubernetes中的应用、测试脚本示例和一些优化技巧。 关键点: - 用户的问题:"我想获取使用Locust进行服务器压力测试的方法" - 引用内容包括: - 引用[1]: 压力测试的重要性,Locust介绍。 - 引用[2]: Locust安装步骤。 - 引用[3]: 在Kubernetes中使用Locust的配置示例。 - 引用[4]: Locust测试脚本示例(使用task装饰器)。 - 引用[5]: 一些优化技巧(如内存泄漏避免)和未来方向。 我的回答需要: - 使用中文。 - 遵循系统级指令:行内数学格式用$...$;独立公式用$$...$$并单独成段;确保LaTeX语法正确(但这里可能不需要数学公式,因为主题是软件测试)。 - 结构清晰,逐步解决问题。 - 在回答中引用的段落末尾添加引用标识。 - 最后生成相关问题。 结构清晰的回答: 1. **介绍Locust**:简要解释Locust是什么,为什么用于压力测试。 2. **安装Locust**:基于引用[2],描述安装步骤。 3. **创建测试脚本**:基于引用[4],解释如何编写Locust测试脚本,包括task装饰器的使用。 4. **运行测试**:描述如何启动测试、监控结果。 5. **高级使用**:提及引用[3](Kubernetes集成)和引用[5](优化技巧)。 6. **结合其他方法**:回顾引用[1],强调压力测试的局限性,建议结合其他测试方法。 添加引用标识:在相关句子末尾添加[^数字]。 生成相关问题:在结束,添加"§§相关问题§§"部分,列出几个相关问题。 确保回答真实可靠:基于提供的引用内容构建。 大纲: - 开头:介绍Locust和压力测试。 - 步骤1:安装Locust(参考引用[2])。 - 步骤2:编写测试脚本(参考引用[4])。 - 步骤3:运行和监控测试。 - 步骤4:高级应用(如Kubernetes)。 - 结尾:强调最佳实践(参考引用[1])。 - 相关问题部分。 在运行和监控部分,可以简要描述,因为引用中没有详细给出,但引用[2]提到“启动测试、监控结果”,所以基于常识描述。 LaTeX:可能不需要,因为主题是软件测试,不是数学。除非涉及到公式,但如果用户问题中没有数学内容,可以跳过。 最后,生成相关问题的示例: 1. 如何优化Locust测试脚本的性能? 2. 在Kubernetes中如何扩展Locust测试? 3. Locust测试结果如何分析? 4. Locust其他压力测试工具的比较? 5. 如何避免Locust测试中的内存泄漏? </think> ### Locust进行服务器压力测试的使用方法 基于您提供的引用内容,我来详细介绍如何使用Locust进行服务器压力测试。Locust是一个基于事件驱动的开源工具,专为模拟大量用户并发访问而设计,适用于Web应用和服务器的性能评估。压力测试能帮助发现性能瓶颈,但需结合功能测试等其他方法以确保全面性[^1]。以下是结构化步骤,确保操作简单、高效: #### 1. **安装Locust** Locust安装简便,支持多种平台。以下是核心步骤(基于Python环境)[^2]: - 确保系统中已安装Python(推荐Python 3.7+)。 - 使用pip命令安装Locust: ```bash pip install locust ``` - 验证安装:运行`locust -V`检查版本。 - 可选:配置虚拟环境以避免依赖冲突(例如,使用`virtualenv`)。 #### 2. **创建测试脚本** 测试脚本定义用户行为和测试场景。Locust使用Python编写脚本,核心是继承`HttpUser`类并使用`@task`装饰器定义任务。每个任务代表一个HTTP请求或用户操作[^4]。 - **脚本示例**:创建一个名为`locustfile.py`的文件(基于引用[4]的简化版)。 ```python from locust import HttpUser, task, TaskSet class ServerTestUser(HttpUser): # on_start方法在用户启动执行,例如登录设置 def on_start(self): self.client.headers = {"Authorization": "Bearer token"} # 设置认证令牌 @task(weight=2) # weight参数控制任务频率,weight=2表示更高概率执行 def test_api_endpoint(self): # 模拟访问服务器API response = self.client.get("/api/data", params={"page": 1}) # 可选:添加断言验证响应,例如assert response.status_code == 200 @task def test_another_endpoint(self): self.client.post("/api/submit", json={"key": "value"}) ``` - **关键元素**: - `@task`:定义测试用例,`weight`参数调整任务权重(例如,weight=2表示执行频率加倍)。 - `self.client`:内置HTTP客户端,支持GET/POST等方法。 - `on_start/on_stop`:分别在用户启动和停止执行,用于初始化或清理资源。 - 提示:脚本应覆盖真实场景路径(如引用[4]中的承保管理API),避免内存泄漏可使用弱引用优化[^5]。 #### 3. **启动和管理测试** Locust提供Web界面或命令行运行测试,实监控性能指标。 - **启动测试**: - 命令行模式:执行`locust -f locustfile.py`启动本地测试。 - Web界面:访问`http://localhost:8089`配置用户数、生成速率等参数(例如,设置100用户并发)。 - 分布式模式:支持多节点并行(引用[3]中Kubernetes示例可用于大规模测试)。 - **监控结果**: - Web界面展示实数据:请求率、响应间、失败率等。 - 关键指标:聚焦$RPS$(每秒请求数)和$P95$(95%响应间),确保服务器在$高负载$下稳定。 - 日志分析:Locust输出详细日志,便于调试错误。 #### 4. **高级应用优化** 针对复杂场景,Locust可扩展集成: - **Kubernetes部署**:如引用[3]所示,使用YAML文件部署Locust master和worker节点,实现自动扩缩容(CPU/内存资源可调)。 - **性能优化**: - 避免内存泄漏:采用弱引用(如引用[5]的`weakref.ref`),减少资源积累。 - 参数化测试:动态生成请求数据(例如,使用CSV文件加载测试数据集)。 - 结合混沌工程:注入故障验证系统韧性[^5]。 #### 5. **最佳实践** - 压力测试局限性:如引用[1]强调,Locust无法模拟所有真实用户行为,建议结合功能测试和安全测试。 - 结果分析:测试后生成报告,评估服务器瓶颈(例如,数据库连接池或网络延迟)。 - 安全退出:使用`on_stop`方法清理资源,避免遗留问题。 通过以上步骤,您可高效实施服务器压力测试。Locust的灵活性和事件驱动模型使其成为评估Web性能的理想工具,但需定期优化脚本并其他测试方法互补以确保质量[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门一刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值