Easy-Jmeter: 性能测试平台

目录

  • 写在开始
  • 1 系统架构
  • 2 表结构设计
  • 3 测试平台生命周期
  • 4 分布式压测
  • 5 压力机管理
  • 6 用例管理
    • 6.1 新增、编辑用例
    • 6.2 调试用例
    • 6.3 启动测试
    • 6.4 动态控量
    • 6.5 测试详情
    • 6.6 环节日志
    • 6.7 实时数据
    • 6.8 测试结果
  • 7 测试记录
  • 7 用例分析
  • 8 系统部署
    • 8.1普通部署
    • 8.2容器化部署
  • 写在最后

写在开始

    在经历了一段相对较长的时间后,在最近我完成了性能测试平台初版的所有功能,这是我在跨越近一年时间中的最大收获。最初有看到网上有个人或团队开发的性能测试平台,就在想如果要实现这么一个工具,这个工具应该是什么样子,应该怎样去做。那时我个人写的接口自动化测试平台已经在公司小范围的使用,同时在不断的优化功能,便暂时将其保留为一个想法。在去年打算将这个想法变为现实,便一点一点的摸索与思考,一点一点的将其实现。由于只是利用业余时间,并且这个过程遇到不少困难,这个系统的实现跨越了较长的时间。相比较之前实现的接口自动化测试平台,这次在做性能测试平台时一个比较大的进步是在开始写代码前,设计阶段准备的充分很多,这次做了完整的原型,不再是一边写一边设计新页面。
    开源工具在功能和专业性上已经足够好了,为什么还要做平台化,平台化的意义是什么呢?我认为工具平台化的好处有以下几点:1.方便团队协作和数据整合:开源工具大多是C/S架构的,不利于团队之间共享和交互,也无法归集和整合历史数据;2.定制化功能:平台化在开源工具的基础上可以结合业务实现自定义功能,与外部系统对接,使得测试变得更加灵活和方便;3.降低成本:界面化比原有系统会操作相对简单,降低了压测环境的维护成本、操作成本和管理成本;4.个人提升:提升个人在代码、性能测试方面的深度。
    目前有非常多的开源性能测试工具,它们的功能都非常完备和成熟,所以在最开始,设计的理念就是在压测功能上尽可能的复用成熟工具的功能。jmeter作为一个开源的性能测试工具,在业内具有权威性的地位,所以这个性能测试平台基于jmeter进行开发。技术栈使用vue+springboot前后端分离,基础的业务框架使用开源的Lin-CMS管理系统,其提供用户、权限、认证等基础功能。数据库使用mysql5.7、mongodb4.2、influxdb1.8,文件存储使用minio文件服务器。实现了用例与测试数据管理、分布式压力测试、实时压测数据查看、测试结果查看与下载、历史测试数据查询和测试结果分析等功能。

源码地址:https://github.com/guojiaxing1995/easy-jmeter
原型地址:https://modao.cc/app/Qf56LAncrokbxs3iOBMRap

EasyJmeter性能测试平台

1 系统架构

系统架构
用户访问web页面,再由页面通过http请求访问业务后端服务。每台压力机服务器(只支持linux)上有且仅有一个jmeter,同时安装一个agent来控制jmeter运行,agent和服务端使用socketio实时通讯,用于服务端下发指令和agent上报状态。业务数据使用mysql进行存储,测试结果的详细数据使用mongodb存储,压测过程中的热数据使用influxdb存储,测试用例脚本、压测数据文件和压测结果文件(日志、jtl、报告)使用minio文件服务器存储。

2 表结构设计

mysql中除去原本CMS框架系统自带的表,测试平台业务表有6张

表名描述
project工程表,管理测试用例的单位
machine压力机表,管理压力机
file文件表
case用例表
task记录表,记录一次压测执行
task_log记录日志表

mongodb中业务集合有2个

集合名描述
reportjmeter报告数据
statistics单个用例的历史整合数据

3 测试平台生命周期

在这里插入图片描述

平台化对压测进行管理,就要定义一次性能测试的各个阶段,这些阶段组成了压测平台的生命周期。生命周期包含了四个阶段,分别是配置、运行、收集和清理。配置阶段主要为将测试所需的数据如jmx脚本、csv文件、扩展jar文件从minio下载到各个压力机,将需要切分的csv文件进行切分,切分就是将一个csv文件内的数据按照压力机的个数分为多份,最后配置脚本和配置文件等参数。配置成功后agent向服务端报告状态,待所有压力机配置完成服务端下发运行指令,进入压测状态,压测状态为jmeter持续运行中并收集测试数据。所有压力机运行完成上报后统一进入收集状态,上传测试结果文件并对结果进行处理并归集。所有压力机都完成收集后进入清理状态,每台压力机重置测试环境。在这一系列阶段中,平台不能丢失对各个阶段的管理,系统在当前阶段出现问题后要可以闭环,所以前三个阶段失败后都会进入清理阶段。同时可以手动的停止前三个阶段,终止压力测试。

4 分布式压测

jmeter本身是支持分布式压测的,但存在一些缺陷,如需要不少额外配置,master节点不参与压测浪费资源,测试数据实时回传master浪费带宽。压测平台本身就已经实现通过agent控制jmeter,agent和服务端通过长连接进行实时通信,在此基础上,由服务端控制各个压力机运行,平台就实现了对于压力机的分布式调度。

5 压力机管理

压力机管理
一台压力机上部署一个agent服务和jmeter,jmeter需要将其安装路径设置为环境变量JMETER_HOME,agent根据环境变量定位jmeter,每分钟判断一次jmeter是否可用并上报ip、版本、路径给服务端,和服务端维护的ip地址匹配作为压力机是否在线的依据,匹配一致的压力机会更新jmeter的版本和安装路径。

6 用例管理

用例列表
用例管理可以新增、编辑、查询、调试、删除用例,可以对目标用例进行启动测试、终止测试、查看测试详情、动态控制TPS和跳转用例的历史记录列表。

6.1 新增、编辑用例

编辑用例

用例新增、编辑时填写用例名称、选择项目,项目为当前系统维护,用来进行用例分类。
上传保存好的jmx文件、csv文件、jar文件,csv文件可选是否切分。

6.2 调试用例

在列表页面点击调试按钮,可以打开调试弹框,点击启动对当前用例以一个线程发起一次请求.如查看结果树一样,可以查看接口的响应和请求信息。
在这里插入图片描述
点击引擎日志,可以查看对应请求的jmeter日志
在这里插入图片描述

6.3 启动测试

在这里插入图片描述

在列表点击启动按钮弹出测试启动弹框,选择运行的并发线程数、压测时间、启动线程的时间、容量控制,容量控制会在下文详细展开。压力机可以选择个数或指定某几台压力机。日志等级为jmeter日志等级。报告时间颗粒度为jmeter生成报告图表的时间采样频率,默认0为系统内置采样率,为0时系统会根据压测时间来设置采样间隔。实时数据展示开关控制本次测试是否记录实时数据并展示。
在测试过程中可以通过列表或详情的进度条查看当前的状态,运行状态的测试可以查看已运行时间的百分比。

6.4 动态控量

这里的动态控量是指吞吐量的限制与动态调节。这个高阶知识点最早是在其他文章中看到的。
在压测时,“控量”是非常重要的,JMeter 是根据线程数大小来控制压力强弱的,但我们制定的压测目标中的指标往往是吞吐量(QPS/TPS),这就给测试人员带来了不便之处,必须一边调整线程数,一边观察QPS/TPS 达到什么量级了。为了解决这个问题,JMeter 提供了吞吐量控制器的插件,我们可以通过设定吞吐量上限来限制 QPS/TPS,达到控量的效果。
在这里插入图片描述
上面的做法能够确保将吞吐量控制在一个固定值上,但这样还远远不够,实际工作中我们希望在每次压测执行时能够随时调节吞吐量,比如,在某个压力下服务容量没有问题,我们希望在不停止压测的情况下,再加一些压力。方案就是将目标吞吐量设置为变量,在测试过程中调整这个值。
在这里插入图片描述
修改jmeter.properties参数

#---------------------------------------------------------------------------
# BeanShell configuration
#---------------------------------------------------------------------------# BeanShell Server properties
#
# Define the port number as non-zero to start the http server on that port
beanshell.server.port=9000
# The telnet server will be started on the next port# Define the server initialisation file
beanshell.server.file=../extras/startup.bsh

执行测试过程中,通过外部命令访问BeanShell服务就能植入我们的BeanShell脚本和全局变量

java -jar <jmeter_path>/lib/bshclient.jar localhost 9000 update.bsh <参数>

自定义的吞吐量更新脚本update.bsh如下:

import org.apache.jmeter.util.JMeterUtils;getprop(p){ // get a JMeter propertyreturn JMeterUtils.getPropDefault(p,"");
}setprop(p,v){ // set a JMeter propertyprint("Setting property '"+p+"' to '"+v+"'.");JMeterUtils.getJMeterProperties().setProperty(p, v);
}
setprop("throughput", args[0]);

在平台中可以通过页面修改吞吐量限制
在这里插入图片描述

6.5 测试详情

在这里插入图片描述
点击用例进入目标用例最近一次测试的详情页面,进行中的用例会展示测试进度。顶部显示用例的基础信息,下方显示测试情况,有并发线程数、压测时长、测试人员、压测开始结束时间、压力机台数,可以下载jmeter日志、测试脚本文件。测试完成后会显示聚合报告。

6.6 环节日志

在这里插入图片描述

测试时实时展示测试阶段每一个环节的进度以及对应环节下每一台压力机的环节结果。更好的管理生产周期状态和排查问题。

6.7 实时数据

在这里插入图片描述
在这里插入图片描述

jmeter支持 Backend Listener 将测试结果实时发往 InfluxDB,平台向 InfluxDB 轮询查询数据,并展示在页面上。目前展示了总TPS、总错误趋势、错误事务统计,以及指定事务筛选,查看对应事务TPS、错误趋势和错误类型分类。除此以外,也可以集成开源数据可视化系统Grafana,进行更加丰富的数据展示。

6.8 测试结果

图表报告1
在这里插入图片描述
在这里插入图片描述
在测试完成后,可以查看测试图表信息,包含TPS、平均响应时间、总TPS、随时间变化的响应时间百分位数(成功响应)、活动线程数共5个图表,以及错误类型占比和错误排行榜top5。点击右上角报告下载按钮,下载jmeter测试报告可查看更多详细数据。

7 测试记录

在这里插入图片描述
测试记录模块可以查看所有的测试记录,支持按照测试编号、用例名称、测试时间、测试结果进行查询。点击详情跳转对应记录的测试详情页,

7 用例分析

在这里插入图片描述
顶部可查看系统数据,包含项目数、用例数、压力机数、测试次数、压测总时长以及总请求数。
左侧为用例列表,支持查看指定用例的平均响应时间、90th响应时间、平均吞吐量、测试次数、压测时长和请求数。支持查看多次测试的响应时间趋势、吞吐量和错误率,可以帮助测试与开发人员在系统优化后,一目了然的查看优化情况。

8 系统部署

8.1普通部署

  1. 安装mysql5.7数据库
  2. 安装mongodb4.2数据库
  3. 安装influxdb1.8数据库
  4. 安装minio文件服务器,设置指定bucket的Access Policy为public
  5. 部署server、agent。代码结构中api目录下为后端目录,后端使用springboot,修改配置文件并打包。其中作为server启动时设置socket.server.enable为true,作为agent启动时设置socket.client.enable为true,agent需要设置服务端socketio地址serverUrl。agent所在压力机需要配置jmete安装路径作为环境变量JMETER_HOME.
  6. 前端服务打包。代码结构中web目录下为前端服务,前端使用vue,node版本v12.13.0,打包命令 npm run build。
  7. 安装nginx。将web目录下default.conf按照实际情况修改,将前端包和配置文件放入nginx指定目录下启动。

8.2容器化部署

  1. 构建后端jar包,代码结构中api目录下为后端目录,后端框架springboot,maven构建命令,mvn clean package
  2. 构建前端dist包,前端使用vue,node版本v12.13.0,打包命令 npm run build
  3. 编辑项目根目录下docker-compose.yaml 文件,修改environment中的minio地址和influxdb地址为实际地址,修改volumes中宿主机jmeter地址为实际地址。项目根目录下执行docker-compose up -d构建镜像并启动。

写在最后

    对于测试工具或其他效能工具,我认为它最重要的就是要好用,这一点涉及到页面交互、功能设计等放放面面。之前做的接口自动化测试平台,有的同事认为可以方便的实现接口的测试,但也有同事认为在使用上还不够友好,我也持续进行了优化,并增加了一些功能,最终还算满意。但后期不管怎样去改,它的基本功能结构在一开始就已经定了,所以设计阶段的工作尤其重要,这次在设计上投入了不少时间。但很多事情并不能等完全想明白再去做,因为有时候事情存在难度、在遇到困难时是没有办法完全理清的,遇到这种时候,就在尽可能准备充分后下手去做,迈开第一步。
    测试平台已经具备了基本的性能测试功能。目前只进行了初步的使用,在后续结合实际业务使用中,我会不断进行功能优化。如果有好的想法和建议,欢迎随时沟通。

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

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

相关文章

CAS5.3使用JPA实现动态注册服务

cas同时支持cas协议和OAuth2协议,官方默认是通过扫描json文件的形式注册客户端服务,但是此种方式需要重启服务才能生效,此次我们将使用JPA来完美实现动态注册服务,如果不知道cas如何部署,可以擦看之前的文章 cas-client基于CAS协议客户端搭建-CSDN博客 cas-server5.3自定义密…

GPIO通用输入输出管脚

GPIO 文章目录 GPIO单片机的工作方式CPU是通过读写寄存器来控制GPIO的GPIO硬件框架 8种模式结构推挽/推挽复用输出模式开漏/开漏复用输出输入结构 单片机是如何访问寄存器的&#xff1f;GPIO输出速度 GPIO,General Purpose lnput Outpu,指的是芯片的通用输入输出管脚。 单片机的…

TLS1.2抓包解析

1.TLS1.2记录层消息解析 Transport Layer SecurityTLSv1.2 Record Layer: Handshake Protocol: Client HelloContent Type: Handshake (22)Version: TLS 1.0 (0x0301)Length: 253Content Type&#xff1a;消息类型&#xff0c;1个字节。 i 0Version&#xff1a;协议版本&…

第二代80KM高效远距离传输:100G ZR4光模块的应用与发展

随着信息时代的发展&#xff0c;数据传输的需求日益增长&#xff0c;而光模块作为数据中心和网络基础设施的关键组成部分&#xff0c;其性能和应用范围也在不断扩大。易天光通信的第二代100G ZR4 80KM光模块很好的满足了当代社会通信网络的需求。本文易天光通信将探讨第二代高效…

数学建模【插值与拟合】

一、插值与拟合简介 在数学建模过程中&#xff0c;通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式&#xff0c;针对此情况&#xff0c;很自然的想法就是&#xff0c;构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这…

快速启动-后台管理系统

目录 Gitee人人开源 后端快速启动 1.clone仓库到本地 2.初始化数据库 3.更改数据库连接 4.启动项目验证 前端快速启动 1.克隆仓库 2.vsCode打开 3.控制台npm install 4.验证测试 时代已然不同&#xff0c;后台管理也可以使用脚手架方式快速启动。 Gitee人人开源 地…

京东 h5st 4.1 4.2 4.3 4.4逆向算法分析、API接口、商品详情、价格API接口(2024-02-26)

一、最新京东h5st 4.4逆向 1、h5st 4.4的位置 搜索关键字h5st很快找到&#xff1a; &#xff08;h5st 4.4所在位置&#xff09; 2、签名代码如下&#xff1a; , r JSON.stringify(a), c (new Date).getTime() || "1", d {appid: "pc-item-soa",functio…

洛谷C++简单题小练习day21—梦境数数小程序

day21--梦境数数--2.25 习题概述 题目背景 Bessie 处于半梦半醒的状态。过了一会儿&#xff0c;她意识到她在数数&#xff0c;不能入睡。 题目描述 Bessie 的大脑反应灵敏&#xff0c;仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码&#xff08;0…9&#x…

短链接的背后故事:为互联网用户带来的便捷与安全

title: 短链接的背后故事&#xff1a;为互联网用户带来的便捷与安全 date: 2024/2/26 14:58:58 updated: 2024/2/26 14:58:58 tags: 短链接技术起源长URL问题解决链接分享便利性链接跟踪与分析链接管理效率提升链接安全保障应用领域广泛 一、短链接的起源 短链接是一种将长UR…

WampServer环境下载安装并结合内网穿透实现远程访问管理界面

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

【前端】一文学懂HTML与CSS选择器基础

文章目录 1. 前言与准备工作1.1 前言1.2 准备工作1.2.1 工具选用1.2.2 VSCode下载与配置 2. 基本概念2.1 通过HelloWorld理解HTML基本概念2.1.1 HTML是什么2.1.2 如何理解"超文本"?2.1.3 HTML基础结构2.1.3 学习第一组标签&#xff1a;段落p与标题h1~h6 2.2 CSS基础…

(202402)多智能体MetaGPT入门1:MetaGPT环境配置

文章目录 前言拉取MetaGPT仓库1 仅仅安装最新版2 拉取源码本地安装MetaGPT安装成果全流程展示 尝试简单使用1 本地部署大模型尝试&#xff08;失败-->成功&#xff09;2 讯飞星火API调用 前言 感谢datawhale组织开源的多智能体学习内容&#xff0c;飞书文档地址在https://d…

实习日志30

概要 高拍仪硬件通信原理&#xff0c;WebSocket源码解析&#xff08;JavaScript&#xff09; WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据…

DWT硬件延时

DWT硬件延时 文章目录 DWT硬件延时软件&硬件延时方案软件延时硬件延时方案 DWT硬件延时方案DWT硬件延时方案DEMCR寄存器DWT硬件延时方案实现延时初始化&#xff1a;US延时&#xff1a;MS延时&#xff1a; 软件&硬件延时方案 软件延时 static void Delay(uint32_t cou…

Leetcode刷题笔记题解(C++):6. Z 字形变换

思路&#xff1a;遍历时候需要更新步进长度 到达0行的时候步进长度为1&#xff1b;到达最后一行numRows-1行的时候步进长度为-1&#xff1b;代码如下所示&#xff1a; class Solution { public:string convert(string s, int numRows) {//如果字符串长度为1或者所给行数为1 …

vscode更新至1.86版本后,ssh远程连接服务器出现异常

问题 you are connected to an OS version that is unsupported by Visual Studio Code 你已连接到不受Visual Studio Code支持的OS 版本 原因是vscode更新到1.86版本后要求远程连接服务器的内核版本和库版本需要符合下面条件。 解决方法 因此有两种方法解决 1.更新服务器…

开源MBG----renrenGenerator

目录 1.克隆项目到本地 2.编辑数据库连接 3.定义生成的代码模版 4.验证生成结果 5.多说一句 项目简介&#xff1a;人人开源项目的代码生成器&#xff0c;可在线生成entity、xml、dao、service、vue、sql代码&#xff0c;减少70%以上的开发任务。 项目地址&#xff1a;ren…

免费SSL证书申请流程及地址

1&#xff0c;选择证书提供商&#xff1a;有许多机构提供免费的SSL证书&#xff0c;如JoySSL。选择一个可靠的提供商是第一步。 免费SSL证书申请地址https://www.joyssl.com/certificate/select/free.html?nid5 2&#xff0c;验证域名&#xff1a;根据提供商的要求&#xff…

TensorRT及CUDA自学笔记003 NVCC及其命令行参数

TensorRT及CUDA自学笔记003 NVCC及其命令行参数 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; NVCC是一种编译器&#xff0c;基于一些命令行参数可以将使用PTX或C语言编写的代码编译成可…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍&#xff1a;一款H5自适应多用途的产品介绍展示单页HTML静态网页模板&#xff0c;可用于团队官网、产品官网。 下载地址&#xff1a; https://www.changyouzuhao.cn/13534.html