压测平台是什么?

压测,即压力测试,作用是对各种服务对象进行压力测试以获得该服务处于或超过预期负载时系统的运行情况,进而判断系统在峰值负载或超出最大负载情况下的处理能力。

压测工具,顾名思义,就是用来进行压力测试的工具,常用的有ab、jmeter、LoadRunner和wrk等等。

而由于在整个压测过程中存在以下问题:

  • 时间成本:每次测试都需要重新搭建一套生产环境,成本太高,且几乎每个环节都需要人力支撑

  • 数据成本:脚本、测试数据、压测机器、测试报告无法沉淀

  • 风险成本:测试用例多,生产压测缺乏平台流程管理,手工执行非常容易出错

  • 自动化问题:自动化性能基线无统一平台支撑,测试过程中靠手动监控,覆盖不全且定位问题困难

为了解决以上这些问题、更好地满足自己/用户的压测需求,不少企业在开源压测工具的基础上进行二次开发,将压测流程管控、压测任务管理和自动化性能基线等功能整合在一起,形成一个可以支撑各种个性化压测需求的分布式业务系统,也就是压测平台。

本文主要讲什么?

本文主要将常见的压测平台与JMeter进行各方面的对比,并分析JMeter有哪些地方还可以改进加强。

主要对比的指标有:

  • 是否适合新手使用
  • UI界面是否符合用户操作习惯
  • 压测部分的功能是否齐全,足够满足用户的各种需求
  • 结果分析的报告是否全面
  • 社区建设是否丰富

性能测试PTS(阿里云)

性能测试 PTS(Performance Testing Service)是阿里云推出的一款具备分布式压测能力的SaaS压测平台。与普遍使用的压测工具相比,PTS所宣传的特点有:

  1. 施压流量来自真实CDN节点

    在PTS服务中进行施压配置时,可以选择国内公网阿里云内网两种模式来设置压力来源。在国内公网模式中,PTS服务会分配来自全国各地的公网IP,并且根据压测的量级来分配对应的节点资源(IP),压力来源足够分散,可以最大程度模拟真实流量的路径。

  2. 纯SaaS平台,使用时无需额外安装和部署

    SaaS(Software as a service)软件即服务,也就是说,软件的服务器在云端,可以通过网络提供服务。

    阿里云将PTS所有服务都web化,用户可以直接在阿里云上的控制台里进行压测操作。

  3. 兼容JMeter脚本,可以平滑复用jmx脚本文件

    除了使用阿里云自研的压测引擎外,还可以使用原生JMeter引擎进行压测,直接导入jmx脚本文件即可。有个需要注意的地方是JMeter压测功能和PTS原生功能共享并发用户数的额度

  4. 配置界面所见即所得,对新手友好

    从配置场景,发起测试,到最后的查看结果报告,几乎所有步骤都可以都可以在网页上进行(除非你要使用jmx脚本);并且在配置场景时,用户可以直接零编码在PTS上进行场景的可视化编排。

  5. 覆盖主流浏览器的录制插件

    用户可以在浏览器上模拟压测场景的操作,浏览器中的插件会录制下压测请求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上没有的功能,如下:

    1. PTS会统计每个请求所返回的响应码,并给出每个时间点的统计结果

    1. PTS会统计所有返回的错误信息

    其他没有提及的大部分功能,grafana上也有,但是不太直观;如PTS和grafana都有调整时间轴更好地分析某一时间段具体的数据的功能,只是在grafana上拉取与缩放时间轴并不太方便。

  • 社区建设是否丰富

    是。

    PTS官方网站上的文档已经十分详细,并且网络上有许多关于PTS使用心得的博客,总体来说资源非常多。JMeter的文档是英文的,虽然国内有人对其进行了翻译,但是对英文不好的用户来说还是需要多费一些功夫;但是网上也有许多JMeter相关的文章,只是找资料的时候需要多多挖掘。

云性能测试服务CPTS(华为云)

一项为基于HTTP/HTTPS/TCP/UDP等协议构建的云应用提供性能测试的分布式压测服务。与上文提到的PTS相似,CPTS同样支持快速模拟大规模并发用户的真实业务高峰场景,也可以很好地支持报文内容和时序自定义、多事务组合的复杂场景测试。它所宣传的特点有:

  1. 低成本的超高并发模拟

    可以利用单压测机实现万级并发。

  2. 测试任务模型自定义

    CPTS引入了“事务”的概念,和PTS中的“串联链路”有一些相似——用户可以定义自己的事务库,并且用户所创建的事务可以被多个测试任务复用,同时每个事务还可以定义多个测试阶段,最大程度地模拟流量起伏的复杂场景。

  3. 压测资源管理,按需使用

    与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类似,算是各有千秋。特色功能如下:

    1. CPTS也会统计每个异常的响应信息并直观地展现出来

    2. CPTS上的响应状态分布图比grafana多了更多数据

  • 社区建设是否丰富

    不太丰富。

    首先,CPTS的官方网站内容不是很多;其次,网上也没有几篇关于使用CPTS的文章(除了官方自己发的以外)。



如上图,可以看出JMeter的网络资源明显更加丰富,在这点上JMeter对用户更加友好。

其他类的压测平台

市场上还有部分压测平台并不像PTS和CPTS那样同时面向个人用户和企业用户,它们一般只为企业用户服务,所以我单独把它们列了出来。

  1. WeTest压测大师

    压测大师的优势主要有

    • 依靠腾讯云提供压力源,并不需要额外配置压力机,同时云端压力稳定无上限
    • 有腾讯专家在线指导并且会定期开展性能测试培训或沙龙等

    但是压测大师的官网上并没有提供体验入口,所以无从得知其服务细节(只能评价一下官网页面做得挺好看的)。

    如果点击【联系客服】,则会转到网页咨询窗口,并提供人工客服选项,联系官方还是比较方便的。

  2. 全链路压测ForceCop

    ForceCop主打业务零侵入多语言支持立体监控等特点,主要的压测功能都有具备,并且附上了客户案例。

    但是如果想要体验ForceCop的服务,需要填写申请表。

  3. 压测宝

    压测宝的官网上信息就没有那么丰富了,只大概提了一下产品的特点,在客户案例部分阐述得比较多,但也没有看出产品的优势具体在什么地方。想要体验服务同样需要申请。

  4. 云压力测试平台 CPT

    CPT是睿象云公司的产品,该公司的主要业务其实是提供高效智能的跨云监控和告警管理服务,云压测服务并不是它们主推的功能。其实个人也可以体验它们的服务,但是由于想说的内容比较少,于是把它放在最后。在体验过程中我有以下几点感受:

    • UI界面对用户不太友好
    • “测试任务”部分操作比较简单,但是“编写脚本”部分很让人费解
    • 与上文的CPTS和PTS相比,没有很特色的功能,用JMeter可以完全替代
    • 压测时可以选择流量所在地域(虽然只有三个选项)

    不过它的文档还算详细,在搜索引擎上也能找到挺多相关文章的(要比CPTS多),算是它的一个优点。

总结

总的来说,衡量一个压测平台的指标大概有以下几项:

  • 学习成本
  • 安装部署成本
  • 是否免费
  • 是否支持多协议
  • 压测结果图形化展示
  • 是否支持TPS模式
  • 是否有链路、场景编排管理支持
  • 是否支持场景录制
  • 生态环境
  • 监控指标是否完备
  • 是否支持原生
  • 是否支持流量地域定制

JMeter的优势在于免费、学习成本低、拥有绝大部分用户所需要的功能、生态环境良好等;这些优势不需要我多说。

我主要阐述一下从以上的多个平台的分析中,JMeter可以有哪方面的改进:

  1. 在JMeter上编写脚本虽然并不是太难,但是如果简化了这一过程则可以大大减少用户的学习成本,可以吸引更多新用户。
  2. 在结果分析报告部分,JMeter可以增加一些对响应数据的分析,使用户可以直观地找出返回了什么错误的响应代码,更快速地处理问题
  3. grafana有很多功能,但是它的界面是全英文的,有些用户会面临着一边抱着字典一边用grafana一边摸不清grafana要如何实现自己需求的窘境
  4. 使用JMeter时,编写脚本在JMeter客户端上、压测在服务器上、查看结果在网页上。这整个压测过程比较割裂,如果可以整合在一起也比较方便用户的使用
  5. 无论是PTS还是CPTS都有容量预估、压力预估的功能,可以考虑在JMeter上完善相关功能

业界压测平台与JMeter的对比的更多相关文章

  1. 高德全链路压测平台TestPG的架构与实践

    导读 2018年十一当天,高德DAU突破一个亿,不断增长的日活带来喜悦的同时,也给支撑高德业务的技术人带来了挑战.如何保障系统的稳定性,如何保证系统能持续的为用户提供可靠的服务?是所有高德技术人面临的 ...

  2. 实现理论上无tps上限的分布式压测(基于Jmeter+InfluxDB+Grafana+Spring Boot)

    JMeter自身带有Master-Slave压测框架,对于并发量不是很高的压力情况下(比如tps低于5000),该方案是可行的,并且使用起来非常方便,只要在配置文件或者命令行工具的参数做一些补充,即可 ...

  3. 全链路压测平台(Quake)在美团中的实践

    背景 在美团的价值观中,以“客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍.特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失.而整个IT基础设 ...

  4. 生产环境全链路压测平台 Takin

    什么是Takin? Takin是基于Java的开源系统,可以在无业务代码侵入的情况下,嵌入到各个应用程序节点,实现生产环境的全链路性能测试,适用于复杂的微服务架构系统. Takin核心原理图 Taki ...

  5. 性能测试四十九:ngrinder压测平台

    下载地址:https://sourceforge.net/projects/ngrinder/files/ ngrinder工作原理:这里的controller就是ngrinder平台 部署(以win ...

  6. 压测工具之JMeter之环境配置及运行

    一.下载JMeter 地址:http://jmeter.apache.org/download_jmeter.cgi 系统:win7 x64 在 Binaries 目录下选择一个合适自己系统的版本,不 ...

  7. 压测工具 ab jmeter

    apach ab|abs ab  -n -c xxx.html/js/css jmeter siege 用途:测试分布式锁是否有效, 测试java Lock是否使用正确,测试接口吞吐量

  8. 美团--Quake全链路压测平台

    原文:连接: https://tech.meituan.com/2018/09/27/quake-introduction.html 开源分布式监控Cat: https://github.com/di ...

  9. wrk,ab,locust,Jmeter 压测结果比较

    背景: 项目需要对一批接口进行压测,要求是接口的QPS(Quest Per Second每秒请求数)达到6万以上由于楼主一直使用的压力测试工具是jmeter,但是jmeter单台电脑无法达到6万的QP ...

随机推荐

  1. IOU->GIOU->CIOU->Focal_loss

    IOU->GIOU->CIOU->Focal_loss 参考b站 总览 2022-1-3号补充 该链接下关于算是函数讨论 https://zhuanlan.zhihu.com/p/1 ...

  2. HTML5续集

    H5 input新增属性 1.color 拾色器 2.Email 电子邮件 3.tel 电话 4.datetime-local 本地日期和时间 5.range 范围 6.url 路径,地址 7.sea ...

  3. 【Golang】创建有配置参数的结构体时,可选参数应该怎么传?

    写在前面的话 Golang中构建结构体的时候,需要通过可选参数方式创建,我们怎么样设计一个灵活的API来初始化结构体呢. 让我们通过如下的代码片段,一步一步说明基于可选参数模式的灵活 API 怎么设计 ...

  4. Arraylist集合、对象数组

    Arraylist集合 ArrayList是List接口的一个实现类,它是程序中最常见的一种集合. 他的特点:在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作,Ar ...

  5. 论文解读(AGC)《Attributed Graph Clustering via Adaptive Graph Convolution》

    论文信息 论文标题:Attributed Graph Clustering via Adaptive Graph Convolution论文作者:Xiaotong Zhang, Han Liu, Qi ...

  6. 内存分析器 (MAT)

    内存分析器 (MAT) 1. 内存分析器 (MAT) 1.1   MAT介绍 MAT是Memory Analyzer tool的缩写.指分析工具. 1.2   MAT作用 Eclipse Memory ...

  7. Learning Latent Graph Representations for Relational VQA

    The key mechanism of transformer-based models is cross-attentions, which implicitly form graphs over ...

  8. Python 中生成器的原理

    生成器的使用 在 Python 中,如果一个函数定义的内部使用了 yield 关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值. 我们先来看一个常规函数的定义,下面的函数 f() ...

  9. Error Code: 1054. Unknown column '字段名' in 'field list'

    问题描述: j博主在java开发过程中,通过读取excel中表名和字段名,动态创建insert的SQL语句,在mysql可视化工具中执行此SQL语句时,一直提示"Error Code: 10 ...

  10. redis 集群 slots are covered by nodes.

    原因数据数据损坏.需要修复 1.检测 redis-cli --cluster check 127.0.0.1:7000 2.检测结果 slots are covered by nodes3.进行修复 ...