IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 性能测试框架——python+locust -> 正文阅读

[开发测试]性能测试框架——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 - 博客园

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:38:39  更:2021-11-22 12:38:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:24:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码