压测,即压力测试,作用是对各种服务对象进行压力测试以获得该服务处于或超过预期负载时系统的运行情况,进而判断系统在峰值负载或超出最大负载情况下的处理能力。
压测工具,顾名思义,就是用来进行压力测试的工具,常用的有ab、jmeter、LoadRunner和wrk等等。
而由于在整个压测过程中存在以下问题:
时间成本:每次测试都需要重新搭建一套生产环境,成本太高,且几乎每个环节都需要人力支撑
数据成本:脚本、测试数据、压测机器、测试报告无法沉淀
风险成本:测试用例多,生产压测缺乏平台流程管理,手工执行非常容易出错
自动化问题:自动化性能基线无统一平台支撑,测试过程中靠手动监控,覆盖不全且定位问题困难
为了解决以上这些问题、更好地满足自己/用户的压测需求,不少企业在开源压测工具的基础上进行二次开发,将压测流程管控、压测任务管理和自动化性能基线等功能整合在一起,形成一个可以支撑各种个性化压测需求的分布式业务系统,也就是压测平台。
本文主要将常见的压测平台与JMeter进行各方面的对比,并分析JMeter有哪些地方还可以改进加强。
主要对比的指标有:
性能测试 PTS(Performance Testing Service)是阿里云推出的一款具备分布式压测能力的SaaS压测平台。与普遍使用的压测工具相比,PTS所宣传的特点有:
施压流量来自真实CDN节点
在PTS服务中进行施压配置时,可以选择国内公网和阿里云内网两种模式来设置压力来源。在国内公网模式中,PTS服务会分配来自全国各地的公网IP,并且根据压测的量级来分配对应的节点资源(IP),压力来源足够分散,可以最大程度模拟真实流量的路径。
纯SaaS平台,使用时无需额外安装和部署
SaaS(Software as a service)软件即服务,也就是说,软件的服务器在云端,可以通过网络提供服务。
阿里云将PTS所有服务都web化,用户可以直接在阿里云上的控制台里进行压测操作。
兼容JMeter脚本,可以平滑复用jmx脚本文件
除了使用阿里云自研的压测引擎外,还可以使用原生JMeter引擎进行压测,直接导入jmx脚本文件即可。有个需要注意的地方是JMeter压测功能和PTS原生功能共享并发用户数的额度。
配置界面所见即所得,对新手友好
从配置场景,发起测试,到最后的查看结果报告,几乎所有步骤都可以都可以在网页上进行(除非你要使用jmx脚本);并且在配置场景时,用户可以直接零编码在PTS上进行场景的可视化编排。
覆盖主流浏览器的录制插件
用户可以在浏览器上模拟压测场景的操作,浏览器中的插件会录制下压测请求URL(包括Header、Body等信息),录制后的内容可以导出为YAML脚本或者JSON脚本。
以下是与JMeter相对比的情况:
是否适合新手使用
适合。
由于PTS的所有操作都可以在网页上进行,用户可以直观地配置各类设置,网站上的文档也介绍得十分清晰,所以很多并不熟悉压测是什么的新手用户也可以轻松使用PTS;但是如果要使用JMeter,新手用户还需要学会如何编写脚本,如何设置参数,如何查看结果等操作。
UI操作界面是否符合用户使用习惯
以我的个人感受来说,是。
评判标准是①没有会令用户产生歧义的地方,②常用的按钮都在用户习惯的位置(比如说保存按钮固定在页面的最下方等),③当鼠标移到部分按钮上时,会以浮窗的方式提示用户此操作会产生的结果,如下图
压测部分的功能是否齐全,足够满足用户的各种需求
是。
以下是对PTS和JMeter的一个功能对比。
功能
性能测试PTS
JMeter
自定义API
Y
Y
设置出参
Y
Y
配置检查点
Y
Y
使用函数/文件参数/自定义参数
Y
Y
添加思考时间
Y
Y
添加集合点
Y
Y
添加条件跳转
Y
Y
添加数据指令
Y
Y
使用模版配置压测场景
Y
N
查看离线报告
Y
Y
容量预估
Y
N
压力预估
Y
N
创建SLA
Y
N
压测调速
Y
N
定时压测
Y
Y
脚本录制
Y
Y
支持的脚本
jmx、json、yaml
jmx
从表格中我们可以看到,其实PTS的大部分功能用JMeter都可以实现,但是在JMeter上使用这些功能时对新手不太友好,而PTS就非常直观地把这些功能都做成了网页上的选项,用户只需要鼠标轻点就可以轻松使用。
结果分析的报告是否全面
是。
PTS的一大优点是压测报告中的指标非常详细,排版清楚,方便用户阅读;并且有一些grafana上没有的功能,如下:
其他没有提及的大部分功能,grafana上也有,但是不太直观;如PTS和grafana都有调整时间轴更好地分析某一时间段具体的数据的功能,只是在grafana上拉取与缩放时间轴并不太方便。
社区建设是否丰富
是。
PTS官方网站上的文档已经十分详细,并且网络上有许多关于PTS使用心得的博客,总体来说资源非常多。JMeter的文档是英文的,虽然国内有人对其进行了翻译,但是对英文不好的用户来说还是需要多费一些功夫;但是网上也有许多JMeter相关的文章,只是找资料的时候需要多多挖掘。
一项为基于HTTP/HTTPS/TCP/UDP等协议构建的云应用提供性能测试的分布式压测服务。与上文提到的PTS相似,CPTS同样支持快速模拟大规模并发用户的真实业务高峰场景,也可以很好地支持报文内容和时序自定义、多事务组合的复杂场景测试。它所宣传的特点有:
低成本的超高并发模拟
可以利用单压测机实现万级并发。
测试任务模型自定义
CPTS引入了“事务”的概念,和PTS中的“串联链路”有一些相似——用户可以定义自己的事务库,并且用户所创建的事务可以被多个测试任务复用,同时每个事务还可以定义多个测试阶段,最大程度地模拟流量起伏的复杂场景。
压测资源管理,按需使用
与PTS中压测集群由控制中心统一调度的情况不同,CPTS支持用户按需创建测试集群,并实现租户间流量隔离。另外在测试期间用户也可以实施扩容、缩容测试集群,升级测试能力等等。
以下是与JMeter相对比的情况:
是否适合新手使用
比较适合。
CPTS和PTS的操作界面有一些相似,操作逻辑也差不多,但是PTS的文档要比CPTS的文档更细致,也对新手更友好。CPTS中有些概念很容易让用户混淆,如“事务”、“用例”与“请求”,文档上也没有详细介绍。新手用户自己摸索着也可以摸索出使用方法,但是要费些功夫。
UI操作界面是否符合用户使用习惯
以我的个人感受来说,符合。
和PTS相似,在操作上没有什么会令用户产生疑问或歧义的地方。
压测部分的功能是否齐全,足够满足用户的各种需求
CPTS的功能比较齐全,以下是对CPTS和JMeter的一个功能对比。
功能
云性能测试服务CPTS
JMeter
自定义API
Y
Y
设置出参
Y
Y
配置检查点
Y
Y
使用函数/文件参数/自定义参数
Y
Y
添加思考时间
Y
Y
添加集合点
Y
Y
添加条件跳转
Y
Y
添加数据指令
Y
Y
使用模版创建压测场景
N
N
查看离线报告
Y
Y
容量预估
Y
N
压力预估
Y
N
创建SLA
N
N
压测调速
N
N
定时压测
Y
Y
脚本录制
Y
Y
绑定域名
Y
Y
支持原生JMeter压测
Y
/
支持的脚本
jmx、json、swagger
jmx
结果分析的报告是否全面
是。
CPTS的报告也比较详细,同时UI界面也非常舒服。有一些功能和PTS类似,算是各有千秋。特色功能如下:
社区建设是否丰富
不太丰富。
首先,CPTS的官方网站内容不是很多;其次,网上也没有几篇关于使用CPTS的文章(除了官方自己发的以外)。
如上图,可以看出JMeter的网络资源明显更加丰富,在这点上JMeter对用户更加友好。
市场上还有部分压测平台并不像PTS和CPTS那样同时面向个人用户和企业用户,它们一般只为企业用户服务,所以我单独把它们列了出来。
WeTest压测大师
压测大师的优势主要有
但是压测大师的官网上并没有提供体验入口,所以无从得知其服务细节(只能评价一下官网页面做得挺好看的)。
如果点击【联系客服】,则会转到网页咨询窗口,并提供人工客服选项,联系官方还是比较方便的。
全链路压测ForceCop
ForceCop主打业务零侵入、多语言支持、立体监控等特点,主要的压测功能都有具备,并且附上了客户案例。
但是如果想要体验ForceCop的服务,需要填写申请表。
压测宝
压测宝的官网上信息就没有那么丰富了,只大概提了一下产品的特点,在客户案例部分阐述得比较多,但也没有看出产品的优势具体在什么地方。想要体验服务同样需要申请。
云压力测试平台 CPT
CPT是睿象云公司的产品,该公司的主要业务其实是提供高效智能的跨云监控和告警管理服务,云压测服务并不是它们主推的功能。其实个人也可以体验它们的服务,但是由于想说的内容比较少,于是把它放在最后。在体验过程中我有以下几点感受:
不过它的文档还算详细,在搜索引擎上也能找到挺多相关文章的(要比CPTS多),算是它的一个优点。
总的来说,衡量一个压测平台的指标大概有以下几项:
JMeter的优势在于免费、学习成本低、拥有绝大部分用户所需要的功能、生态环境良好等;这些优势不需要我多说。
我主要阐述一下从以上的多个平台的分析中,JMeter可以有哪方面的改进:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章