基于 Jmeter 的轻量级云压测平台的原理与实现

news2024/11/29 8:45:13

目录

前言:

背景

云压测平台要解决什么问题

云压测平台为什么要自己实现

实现语言及内核

开发语言

Jmeter 的优缺点

Jmeter 压测启动的方式

从需求看实现

核心需求

抛弃的需求 1:在线生成测试脚本

抛弃的需求 2:在线监控服务器指标

结尾


前言:

在进行性能测试时,我们需要确保应用程序在不同负载和压力下的表现。

背景

云压测平台在测试领域并不是陌生的名词,简单来说就是在网页/移动端执行压测操作,同时压力机是部署在云端。
如压力节点机在云南,那就是云南产生压力,在北京,那就是北京产生压力。
现阶段云压测平台挺多的,我了解到的就有收费的如阿里云的 PTS、XMeter,还有一些开源的,如 nGrinder、云集微店的 TITAN。

云压测平台要解决什么问题

  1. 压测任务和业务的关系:隶属层级。
  2. 压测任务和测试人员的关系:权限管理。
  3. 摒弃繁琐的手工操作,提高效率,完全线上操作。
  4. 实时查看结果:集成监控平台。
  5. 历史压测数据留存:在线测试报告。
  6. 统一压测工具,统一压测标准。

云压测平台为什么要自己实现

收费的就不提了。
开源的各种压测工具,总会面临各种问题:

  1. 脚本语言写的压测内核,创造压力的性能就不够。
  2. 冷门的压测软件,测试结果难以服众。
  3. 软件用的人少,容易出问题和出了问题不好解决。
  4. 热数据图形监控都不好。
  5. 系统较庞大,占用资源较多。
  6. 是否便于推广,真正减轻工作量。

同时,平台实现之后还有好处:

  1. 和其他测试工具/平台做集成对接。
  2. 和其他部门的工具/平台做对接。
  3. 全链路性能测试的起点,公司性能保障的开端。

实现语言及内核

开发语言

其实平台本身使用什么语言开发都可以,但是由于压力内核选择使用了 Jmeter,为了要调用 Jmeter 的 API,平台也选择使用 Java 开发。

Jmeter 的优缺点

优点不详述了,最重要的还是顶级项目开源,社区活跃,Java 语言性能好和跨平台。

说下缺点,我目前发现的有:

  1. 代码还是庞大冗余,但这一定程度上保证了软件稳定性。
  2. 至少测试报告的核心开发,水平一般(我有实锤,要反驳的别在这吵)。
  3. Jmeter 的 API 设计的一般,调用时较麻烦。
  4. 分布式压测架构存在中心节点瓶颈,总压力上不去。
  5. 用大文件生成测试报告,时间较长。

所以国内已经有余力的公司(阿里)是在改造 Jmeter,就是取其精华去其糟粕了。

Jmeter 压测启动的方式

  • 脚本执行

平台根据前端的操作,自动拼接出一行可执行的命令,然后在指定服务器上执行这段脚本。
相当于是手工敲的命令平台帮着拼接和回车执行了。
即便是前端来生成测试脚本,也可以先保存成 jmx 文件,再脚本执行。
特点是平台和 Jmeter_Home 完全分离,带来的:

  1. 平台代码可以不用 Java 写了,什么语言写都可以,仅仅是拼装命令。
  2. 毕竟是脚本执行,Jmeter 随意切换版本。
  3. 平台和 Jmeter 可以不部署在同一台服务器上,即不是相同的进程内了。
  4. Jmeter 挂掉不影响平台运行。
  • 程序内引用 Jmeter 的 API 来压测执行

平台代码直接调用 Jmeter 的 API。
相对脚本执行的实现:

  1. 平台代码需要使用 Java 来写,毕竟要引入 Jmeter 的 jar 包了。
  2. 同样支持各种版本的 Jmeter,但是不灵活。
  3. 同平台在一个进程内产生压力,Jmeter 如果挂了,平台也危险,因为可以线程产生压力。

对比脚本执行的好处:

  1. 脚本执行得到的返回仅仅是窗口返回数据,太单薄且不稳定。
  2. 可以定制 Jmeter 功能,比如自实现压测监控数据。
  • 补充
  1. Jmeter 成名已久,程序还是很稳定的,至少 master 主节点我没遇到因为压测导致的崩溃。同时基于 JDK 的线程启停都很顺畅。
  2. 网上之前有声音说 Jmeter 2 系列版本性能更优,我认为是有一定依据的,至少代码量没现在这么臃肿,不过我自测的情况是,4 版本和 2.13 版本的压测性能差不多。
  3. 由于 Jmeter 3 版本才开始支持测试报告生成,所以我默认使用 Jmeter 4 版本的 API。
  4. Jmeter 的 API 随着版本更新有变化。

我的平台两种方式都支持,当然推荐是引用 Jmeter 的 API 方式启动,可配置。

从需求看实现

核心需求

  • 网页/移动端可以启动压测和停止压测。

最最基本的要求了。

  • 压测数据可以在线实时监控。

如果没有在线实时监控,那和 Jmeter 自身的脚本压测甚至和 AB 等工具,就没啥区别了。

  • 可能生成测试报告,最好在线查看,最少也要导出查看。

Jmeter 3 开始支持测试报告,这也是选择 Jmeter 的原因之一。

  • 支持分布式压测

即云压测的基础。

  • 权限管理

权限管理是平台面向全公司/全网的基础。

  • 业务层级展示

压测需要和具体业务有关系,这个关系在平台上要可以设置。

  • 压测热数据实时监控要可控

图形监控的功能要非常丰富,比如放大缩小等。

  • 删除,下载等操作

删除是让系统文件空间可控。下载是移动办公的基础。

  • 分布式节点管理

分布式压测的衍生需求,有了分布式节点管理,能大大减轻手工操作。同时各种提示非常人性化。

抛弃的需求 1:在线生成测试脚本

这曾经是我比较纠结的地方。

  1. 测试脚本要适应各种场景,各种协议,至少 HTTP(S),TCP 协议要有。
  2. 各种协议就要有不同的输入页面。
  3. 需要前端输入压测指标数据,如步长,虚拟用户数等等。
  4. 断言的实现。
  5. 前端录制脚本。

还有很多很多。
阿里的 PTS 是让在平台上写脚本代码实现最核心的功能包括断言,然后页面录入压测指标数据。
这样做如果遇到复杂的性能测试要求,问题很大:

  1. 调试困难,不解释了,在线调试代码,尤其移动端,画面太美。
  2. 参数化,测试数据关联要怎么破,尤其测试的请求特别多的情况。
  3. 高昂的学习成本,这么复杂的脚本代码我还搞什么工具推广,工具面对的是小白怎么办。

所以我的选择很简单,上传 Jmeter 的脚本,同时上传参数化文件。
好处不说了,详细的后续会介绍。

抛弃的需求 2:在线监控服务器指标

简单来说,就是平台可以实时监控到服务器的网卡,CPU,内存,磁盘,甚至日志等等。
我放弃的原因:

  1. 自研不如直接用开源。
  2. 运维和阿里云都有监控,功能重复。
  3. 自研性价比不高。

其实这个话题很大,比如监控到什么程度才算合格,能否做到智能化监控与测试报告的连接,服务器指标数据和服务器日志的结合展示分析等等。
在没想好怎么做之前,我的选择是抛弃这部分需求,做不好不如不做。

结尾

平台我一直在深度使用,挺好用。
平台代码当前也比较稳定。

平台创造压力的能力和 Jmeter 的内核相同,无论是单机还是分布式,同样的支持 Grafana+InfluxDB。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

HANA学习笔记

1、安装 准备安装介质,我这儿用的是HANA2.00.059.00,注意会用到三个lib包和saptune,提前准备好。 执行./hdblcm开启数据库安装,过程中会涉及到需要用户设置一些参数,按照自己需求设置即可。 安装完成会生成一个安装日…

被泼冷水后,谁能超越微服务?

历史总会重演。一切刚过去的,又会被重新提起。开源项目Codename One的联合创始人Shai,曾是Sun Microsystems开源LWUIT项目的共同作者,参与了无数开源项目。作为最早一批Java开发者,最近感慨道:单体,又回来了…

oracle查询符号隔开的字段中是否存在某项

CREATE OR REPLACE FUNCTION FIND_IN_SET_BY_COMMA(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 : ,) -- 用什么分隔符这里改成什么 RETURN NUMBER IS l_idx number:0; -- 用于计算piv_str2中分隔符的位置 str varchar2(500); -- 根据分隔符截取的子字符串…

二、SQL-6.DCL-2).权限控制

*是数据库和表的通配符,出现在数据库位置上表示所有数据库,出现在表名位置上,表示所有表 %是主机名的通配符,表示所有主机。 e.g.所有数据库(*)的所有表(*)的所有权限(a…

2-vi和vim的使用

vi和vim的区别 vi 是linux系统中内置的文本编辑器vim具有程序编辑能力 vi和vim常用的三种模式 正常模式 使用vim打开一个文件,就默认进入正常模式可以使用方向键【上下左右】来移动光标可以使用【删除字符/删除整行】来处理文件内容也可以使用【复制/粘贴】快捷键…

文心一言 VS 讯飞星火 VS chatgpt (66)-- 算法导论6.5 5题

五、试分析在使用下列循环不变量时,HEAP-INCREASE-KEY 的正确性:在算法的第4~6行 while循环每次迭代开始的时候,子数组 A[1…A.heap-size]要满足最大堆的性质。如果有违背,只有一个可能:A[i]大于 A[PARENT(i)]。这里,你可以假定在…

AWS / VPC 云流量监控

由于安全性、数据现代化、增长、灵活性和成本等原因促使更多企业迁移到云,将数据存储在本地的组织正在使用云来存储其重要数据。亚马逊网络服务(AWS)仍然是最受追捧和需求的服务之一,而亚马逊虚拟私有云(VPC&#xff0…

如何高效地查询IP归属地

高效识别IP归属地是网络安全领域中的一项重要工作。准确地识别IP的归属地不仅可以帮助网络管理员追踪和定位潜在的网络攻击者,还可以用于网络流量分析、地理定位服务等方面。 以下将介绍几种高效识别IP归属地的方法。 使用IP归属地数据库 IP归属地数据库是一种存储…

禾赛激光雷达sdk调试

1.产品型号: "PandarXT-32" 2.Sdk地址,选择相应的版本 https://github.com/HesaiTechnology/ 根据官网教程安装配置即可; 3.激光雷达硬件通过网线连接到主机,然后更改网口的IP地址; 根据产品手册教程 激…

uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好

学习目标: 学习目标如下: 例如: uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好 学习内容: 学习内容如下所示: 相关属性的说明 进度条的显…

白话机器学习笔记(三)评估已建立的模型

模型评估 在进行回归和分类时,为了进行预测,我们定义了函数 f θ ( x ) f_\theta(x) fθ​(x),然后根据训练数据求出了函数的参数 θ \theta θ。 如何预测函数 f θ ( x ) f_\theta(x) fθ​(x)的精度?看它能否很好的拟合训练数…

Dockerfile 创建镜像,构建LNMP+wordpress架构

目录 一、Dockerfile 构建镜像 1.Dockerfile 构建 nginx镜像 1.1创建 nginx Dockerfile 目录 1.2编写 Dockerfile 文件 1.3构建nginx镜像 2.Dockerfile 构建 mysql 镜像 2.1创建 mysql Dockerfile 目录 2.2修改mysql配置文件 2.3编写 Dockerfile 文件 2.4构建mysql镜…

Redis源码篇 - Ziplist数据结构

Ziplist是一种内存优化的list存储结构,通过使用连续的内存空间存储,来减少内存碎片化,同时和链表的不同还有,它不存储前后指针,而是通过变长的字节存储前节点元素长度,通过计算长度来实现节点的查找。它是一…

因材施教,有道发布“子曰”教育大模型,落地虚拟人口语教练等六大应用

因材施教的教育宗旨下,大模型浪潮中,网易有道凭借其对教育场景的深入理解和对商业化的理性思考,为行业树立了垂直大模型的典范。 7月26日,教育科技公司网易有道举办了“powered by 子曰”教育大模型应用成果发布会。会上重磅推出了…

好莱坞怕了, Gen-2全面开启免费使用

仿佛一声惊雷炸响,7月24日Runway 宣布,Gen-1 和 Gen-2 已经彻底开放,任何人都可以注册一个账号免费尝试。生成的视频长度为 4 秒,每秒消耗 5 个积分,利用免费额度可以生成二十六个视频。如果免费积分耗尽,付…

【前端学java】JAVA中类的基础概念

theme: cyanosis java中的类语法和前端的类语法几乎是一致的。 基础代码示例 JAVA的面向对象编程和JS的类语法十分接近,我们看一段代码 public class Object_oriented {public static void main(String[] args) {// 打工人 前的PeoPle是类型People dagongren ne…

微信自动回复怎么设置?

宝子们 你们有遇到或正面临以下情况吗? NO.1 “消息爆炸” 小能,是一位在微信公众号分享美食和旅行的博主 由于内容质量高、互动性强,他的粉丝数量迅速增长 然而,随之而来的是大量的留言和私信 小明根本无法应付 他曾经试…

GFLv2 论文学习

1. 解决了什么问题? 预测定位质量对于目标检测很重要,在 NMS 时它能提供准确的得分排序,提高模型的表现。现有方法都是通过分类或回归的卷积特征来预测定位质量得分。 2. 提出了什么方法? 受到 GFLv1 的 general distribution …

端口复用与重映射

端口复用和重映射 STM32F1有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 大家都知道,MCU都有串口…

Linux中的ldd命令使用方法总结

ldd(List Dynamic Dependencies)命令是Linux系统中的一个工具 它用于打印出一个可执行文件所依赖的共享库文件(动态链接库) 当你运行ldd命令,并跟上一个可执行文件作为参数,它会列出该可执行文件所需要的…