性能测试框架——python+locust

目录

性能测试测试点

指标体系

用户数

监控windows系统指标

使用Python监控系统资源

安装和使用

安装

代码模板

问题处理

locust启动参数


性能测试测试点

分类:负载测试、压力测试、容量测试、配置测试

其他的测试:基准测试、稳定性测试、并发测试等

指标体系

  • 响应时间(Response Time):反应系统处理效率的指标(how fast),从开始到完成某项任务所需的时间,响应时间通常随着负载的增加而增加。
  • 吞吐量(Throughput):反映系统处理能力的指标(how much),指单位时间内完成工作的量,可以从客户端或者服务端两方面的视角进行综合的评估。
  • 事务处理能力(TPS):对某项事务处理时的响应情况,通常包含三个指标——处理事务的响应时间、处理事务的成功率、单位时间内处理事务的量。
  • 资源利用率(Utilization):资源的利用率由多个指标构成——CPU利用率(%Processer Time)、CPU队列长度、可用内存数、磁盘使用率(%Disk Time)、磁盘队列长度、网络带宽、线程池消耗、连接池消耗。

用户数

  • 最佳用户数:指系统能够承受的最佳负载。
  • 最大用户数:指系统能够承受的最大负载,容量。
  • 在线用户数:所有正在访问系统的用户(不一定是正在操作,而是包含客户端和服务端仍建立session会话机制的用户)。
  • 并发用户数:同时对于服务器产生的用户总数。
  • 系统用户数:系统额定的用户数(设计容量,是一个理论值)。

监控windows系统指标

  • 管理工具->性能监视器->用户定义->新建”数据收集器”->下一步
  • 点击”数据收集器”,右侧右击选择”Performance Counter”,再右击”属相” 设置计时器、日志格式、时间间隔
  • 右键点击”数据收集器”,在停止条件中设置持续时间不受限制
  • 点击开始,运行之后查看结果

使用Python监控系统资源

Psutil是一个基于python的跨平台监控管理模块,他提供了非常方便的进程信息。可以之间使用pip安装。

import psutil

print(psutil.cpu_times())
print(psutil.cpu_stats())

安装和使用

官网:Locust Documentation — Locust 2.5.0 documentation

安装

pip install locust

查看安装版本信息:locust --version

代码模板

# 参考文章:https://blog.csdn.net/swinfans/article/details/88915176
import os
from locust import TaskSet, task, HttpUser


# 创建任务类
class Test1(TaskSet):
    def on_start(self):
        # 初始化方法on_start,相当于setup
        print('初始化方法')

    @task
    # @task装饰器加到定义的方法前面表示这个方法就是一个可执行任务,装饰方法中可以添加数字(@task(2)),表示执行任务的执行次数的比例
    def getindex(self):
        """
        在Locust类中具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力(请求方法)。
        通常情况下不会直接使用Locust类,因为其client属性没有绑定任何方法,所以在使用Locust时需要先继承Locust类,
        然后再继承子类中的client属性中绑定客户端的现实类。client的post和get方法同requests类。
        :return:
        """
        req = self.client.get('/', name='测试', catch_response=True)
        # 添加断言必须在请求方法中设置catch_ response参数,值为True
        if req.status_code == 200:
            req.success()
        else:
            req.failure('失败')

    def on_stop(self):
        # 清除方法,相当于teardown
        print('清除方法')


# 创建用户类
class BI(HttpUser):
    # wait_time = between()   设置运行过程中的间隔时间,需要在locust中引入between
    tasks = [Test1]
    min_wait = 1000
    max_wait = 2000
    host = 'http://127.0.0.1:81'


if __name__ == '__main__':
    os.system('locust -f testindex.py')

问题处理

定义用户类继承HttpLocust类,运行的时候报错

ImportError: The HttpLocust class has been renamed to HttpUser in version 1.0

现在已经改为继承HttpUser类

class DeprecatedHttpLocustClass(
    metaclass=deprecated_locust_meta_class(
        "The HttpLocust class has been renamed to HttpUser in version 1.0. "
        "For more info see: https://docs.locust.io/en/latest/changelog.html#changelog-1-0"
    )
):
    pass

添加用户执行任务报错

Exception: No tasks defined. use the @task decorator or set the tasks property of the User

继承HttpLocust类使用  task_set =任务类名  指定用户要执行的任务,这个方法已被抛弃,使用的时候会报错,已改为继承HttpUser类使用 task=[] ,列表中存储的是要执行的任务类的类名

locust启动参数

web界面模式参数

-H HOST  或 --host HOST

被测试的域名或ip地址端口(需要带http://前缀)

--web-host  WEB_HOST   

运行locust的机器ip地址,浏览器访问的ip(127.0.0.1\localhost\机器ip)

-P PORT 或 --port PORT 或 --web-port PORT

指定locust运行的端口,默认为8089,可以通过该参数进行自定义修改

-f  LOCUSTFILE或 --locustfile  LOCUSTFILE

指定locust运行的文件

  

无界面运行

--no-web

无图形模式运行的时候需要添加-c和 -t参数,执行的时候根据参数配置直接运行
-c NUM_CLIENTS 或 --clients NUM_CLIENTS

无图形模式,设置运行的用户数

-r HATCH_RATE 或--hatch-rate HATCH_RATE

指定每秒生成的用户数
-t RUN_TIME或--run-time RUN_TIME

设置总运行时长(数字加单位,s/m/h/,如1h30m)

分布式运行模式

--master

设置为主进程
--master-bind-host MASTER_BIND_HOST

主进程,绑定ip地址,只能用于--master

--master-bind-port  MASTER_BIND_PORT

主进程,绑定端口,默认为5557,只能用于--master

--slave

设置为助理进程
--master-host  MASTER_HOST

助理进程连接的主进程ip地址,只能用于--salve

--master-port  MASTER_PORT

助理进程连接的主进程port,默认端口号5557,只能用于--salve

其他参数

--step-load

步长加载模式,做负载测试,需要有--step-clients 、--step-time参数

步长:每段步长启动的用户数,

步长时间:每个步长的持续时间

--step-clients STEP_CLIENTS

步长加载模式中,总共加载的用户数,仅用于--step-load一起用

--step-time

步长加载模式中,加载用的时间,仅用于--step-load  一起用
--cvs CVSFILEBASE  或  --cvs-base-name CVSFILEBASE

将运行结果写入到指定前缀的cvs文件中,默认为2秒写入一次,可以自行设置

--cvs-full-history

将每个统计的信息写入到_stats_history.cvs文件中
--loglevel LOGLEVEL 或 -L LOGLEVEL设置日志级别:DEBUG\INFO\WARNING\ERROR\CRITICAL,默认为INFO
--logfile LOGFILE指定日志输出的文件,没有设置的时候,默认转到stdout\stderr
--print-stats控制台输出
--only-summary仅输出概要报告

参考文章:

性能测试工具--Locust官方文档(API)解读(全) - 云+社区 - 腾讯云 (tencent.com)

python+locust性能测试(二)之locust深入使用 - Solarium - 博客园 (cnblogs.com)

Locust 性能测试工具安装使用说明 - oO_Ray - 博客园

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用PythonLocust来进行对ES7的压测。首先,确保你已经安装了PythonLocust。 接下来,你需要安装elasticsearch-py库,它是Python与Elasticsearch进行交互的库。可以使用以下命令安装: ``` pip install elasticsearch ``` 然后,创建一个Python脚本,导入必要的模块和库: ```python from locust import HttpUser, task, between from elasticsearch import Elasticsearch class ESUser(HttpUser): wait_time = between(1, 5) def on_start(self): # 创建一个Elasticsearch客户端连接 self.client = Elasticsearch(['localhost:9200']) @task def search(self): # 定义一个搜索任务 query = { "query": { "match_all": {} } } # 发送搜索请求 response = self.client.search(index='your_index', body=query) # 打印搜索结果 print(response) ``` 在上面的代码中,我们创建了一个名为ESUser的Locust用户类。在`on_start`方法中,我们创建了一个Elasticsearch客户端连接。 然后,在`@task`装饰的`search`方法中,我们定义了一个搜索任务。你可以根据自己的需求修改查询条件。在该方法中,我们发送了一个搜索请求,并打印了搜索结果。 最后,你可以在命令行中使用Locust命令来启动压测: ``` locust -f your_script.py --host=http://localhost:9200 ``` 替换`your_script.py`为你的脚本文件名,`http://localhost:9200`为你的ES7的地址。 然后,你可以在浏览器中访问Locust的Web界面(默认为http://localhost:8089)来配置并启动压测。 注意:在进行压测之前,请确保你已经在ES7中创建了索引,并且数据已经准备好。另外,压测会对目标系统造成一定的负载,请谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值