本文选取了目前主流的几种性能压测工具,包括阿里云PTS、Apache JMeter、ApacheBench(ab)、wrk,为您从多方面分析这些压测工具的优缺点。
阿里云PTS
性能测试PTS(Performance Testing Service)是阿里云一款商业化的性能测试工具。支持按需发起压测任务,可支持百万并发、千万TPS流量发起能力,100%兼容JMeter。PTS支持的场景编排、API调试、流量定制、流量录制等功能,可快速创建业务压测脚本,精准模拟不同量级用户访问业务系统,帮助业务快速提升系统性能和稳定性。
阿里云PTS具备如下特性:
免运维、开箱即用
SaaS化施压、最大支持百万级并发、千万级TPS流量自助发起能力。
支持多协议
支持HTTP1.1/HTTP2/JDBC/MQTT/Kafka/RocketMQ/Redis/WebSocket/RMTP/HLS/TCP/UDP/Spring Cloud/Dubbo/gRPC等主流协议。
支持流量定制
支持全球施压地域定制、运营商流量定制、IPv6流量定制。
稳定、安全
阿里自研引擎,基于信号量模型,单机支持超高并发,历经多年阿里双十一场景验证可轻松模拟亿级别流量,更加稳定和安全。
性能压测一站式解决方案
无需编码即可构建复杂压测场景。覆盖压测场景构建、压测模型设定、启动压测、分析定位问题、查看压测报告等完整的压测生命周期。
100%兼容开源JMeter
Apache JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。Apache JMeter具备如下特性:
支持分布式施压。
支持图形化界面,且支持流程编排,同时支持断言、逻辑控制器等高级指令,可满足复杂业务压测需求。
扩展性强,开发、测试人员可通过编写自己的插件,满足各种压测需求。
技术生态好,有强大的开源社区支持,开发者活跃度高。
支持查看资源监控、性能报告,但可查看的监控和报告指标较少。
基于并发模型,受限于JVM,单机无法支持超高并发。且只支持并发施压模型,不支持吞吐量施压模型。
开源支持的分布式能力无法大规模应用到生产环境,部署成本高。
不支持测试用例管理、压测脚本管理等功能。
ApacheBench
ApacheBench(ab)是一款针对HTTP协议做性能压测的命令行工具。ApacheBench具备如下特性:
具有较好的扩展性。
支持协议单一。对HTTP协议支持度较好,不支持主流的HTTPS、WebSocket等协议。
支持请求总数、并发数、压测时长控制。
作为一款命令行压测工具,上手较为简单。
单机压测工具,无分布式施压能力,无可视化界面。
不支持链路编排、场景管理等功能,无法做带业务含义的复杂压测。
单次压测,只能对单个域名或地址发起流量请求。
压测统计指标维度少,缺少压测过程中的统计数据,无法获取系统负载等指标。
wrk
wrk是一款针对HTTP协议的基准测试工具。wrk具备如下特性:
轻量级性能测试工具,安装简单。
学习成本低。
基于异步事件驱动框架,单机支持高并发。
单机压测工具,无分布式施压能力。
只支持HTTP协议。
无可视化界面,不支持流程编排、断言等能力,无法满足复杂压测需求。
总结
对比项 | 阿里云PTS | Apache JMeter | ApacheBench | wrk | |
成本 | 学习成本 | 低 | 中 | 低 | 低 |
部署、运维成本 | SaaS服务,免部署 | 单机部署成本低、分布式部署成本高 | 低 | 低 | |
是否收费 | 是 | 开源、免费 | 开源、免费 | 开源、免费 | |
分布式能力 | 是否支持分布式施压 | 是 | 是,但部署、运维成本高 | 否 | 否 |
压测引擎能力 | 单机性能 、稳定性 | 自研引擎,高 | 低 | 中 | 高 |
是否支持多协议 | 支持 | 支持 | 不支持 | 不支持 | |
施压量级 | 高,最大百万并发、千万TPS | 低 | 低 | 低 | |
压测场景构造 | 是否支持客户端录制流量 | 支持,支持Chrome/iOS/Android录制器 | 不支持 | 不支持 | 不支持 |
是否支持流程编排 | 支持,无需编码 | 支持 | 不支持 | 不支持 | |
是否支持出参提取、断言、逻辑控制器等 | 支持 | 支持 | 不支持 | 不支持 | |
压测数据构造 | 是否支持文件数据源 | 支持 | 支持 | 不支持 | 不支持 |
是否支持从DB中读取数据作为压测数据源 | 支持 | 不支持 ,需自己实现 | 不支持 | 不支持 | |
是否支持使用函数生成或者二次加工压测数据 | 支持 | 支持 | 不支持 | 不支持 | |
压测模型构造 | 是否支持并发模型 | 支持 | 支持 | 支持 | 支持 |
是否支持吞吐量模型 | 支持 | 不支持 | 支持 | 支持 | |
是否支持流量漏斗模型 | 支持 | 不支持 | 不支持 | 不支持 | |
是否支持自动递增、阶梯递增等流量模型 | 支持 | 支持 | 不支持 | 不支持 | |
压测流量构造 | 是否支持多地域流量定制 | 支持 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | 不支持,依赖自己部署 |
是否支持IPv6流量 | 支持 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | |
压测流量控制 | 是否支持压测过程中手动调速 | 支持 | 不支持 | 不支持 | 不支持 |
是否支持施压过程中动态扩展最大压力、施压机引擎 | 支持 | 不支持 | 不支持 | 不支持 | |
压测数据可视化 | 是否支持压测过程中多维度实时指标监控 | 实时秒级数据、多维度分析 | 支持,但分析维度有限 | 不支持 | 不支持 |
是否支持压测报告 | 支持完整压测报告 | 支持,报告较简单 | 支持,报告较简单 | 支持,报告较简单 | |
是否支持关联被压系统监控数据 | 支持,可关联阿里云云监控数据 | 不支持 | 不支持 | 不支持 | |
是否支持性能基线能力 | 支持 | 不支持 | 不支持 | 不支持 |