JMeter拥有丰富的组件体系,面对不同类型的被测应用,如何快速准确地选择组件组合是性能测试脚本设计的问题。
一、组件执行顺序
执行顺序固定为:
配置元件-前置处理器-定时器-采样器-后置处理器-断言-监听器。
搭配组件时务必遵循此顺序,尤其是依赖提取值的场景。
二、按被测应用类型选择组件
场景A:Web应用/RESTAPI
组件
线程组-使用普通线程组,控制并发数、启动时间和循环次数。
采样器-使用HTTP Request,发送HTTP/HTTPS请求。
监听器-至少添加聚合报告,用于查看吞吐量、平均响应时间、错误率。调试阶段可临时加查看结果树验证请求/响应。
扩展组件
参数化(多用户不同账号)-CSV Data Set Config,从文件读取测试数据。
提取动态值(Token、ID)-JSON Extractor或正则表达式提取器,从响应中提取供后续请求使用。
验证响应正确性-响应断言(检查状态码或内容)。
模拟思考时间-固定定时器或其他定时器,控制请求间隔。
一次登录多次使用-仅一次控制器,将登录请求放入其中。
混合业务比例控制-吞吐量控制器,调整各操作占比。
合并多个请求为一个事务-事务控制器,统计整体耗时。
公共请求头(如Authorization)-HTTP信息头管理器。
会话保持-HTTP Cookie管理器,自动处理Cookie。
动态生成随机数据-函数助手(如__Random、__time)。
提醒:压测执行时务必禁用查看结果树等可视化监听器,只保留聚合报告。
场景B:数据库性能测试
组件
线程组-普通线程组,控制并发数据库连接数。
配置元件-JDBC Connection Configuration,配置驱动、URL、用户名、密码。
采样器-JDBCRequest,执行SQL查询或更新。
监听器-聚合报告,查看SQL响应时间和吞吐量。
扩展组件
SQL参数动态化-用户定义的变量或CSV Data Set Config。
验证结果集-响应断言,检查返回数据是否符合预期。
混合执行不同SQL-吞吐量控制器或随机控制器。
场景C:消息队列(JMS)测试
组件
线程组-普通线程组,控制生产者/消费者并发数。
配置元件-JMS连接配置,设置连接工厂和目的地。
采样器-JMS Publisher(发送)或JMS Subscriber(接收)。
监听器-聚合报告,查看收发性能。
注意:需将对应的JMS客户端JAR包放入JMeter的lib目录。
场景D:SOAP WebService
组件
线程组-普通线程组。
采样器-SOAP/XML-RPC Request。
监听器-聚合报告。
扩展组件
HTTP信息头管理器-设置SOAP Action等必要头信息。
响应断言-验证SOAP响应中的特定节点。
XPath提取器-从XML响应中提取动态值。
场景E:FTP服务
组件
线程组-普通线程组。
采样器-FTP Request(上传/下载)。
监听器-聚合报告。
场景F:TCP/Socket服务
组件
线程组-普通线程组。
采样器-TCP Sampler。
监听器-聚合报告。
三、通用搭配实践
最小可用配置结构
一个测试计划至少包含:
线程组(定义负载)
采样器(发送请求)
监听器(至少聚合报告)
不同阶段的监听器选择
调试阶段-使用“查看结果树”查看请求/响应详情。
压测执行阶段-使用“聚合报告”或Summary Report,轻量且影响小。
长期监控-使用后端监听器将数据推送到Influx DB,再配合Grafana展示。
线程组类型选择
普通线程组-绝大多数稳态压力测试。
setUp线程组-测试前的数据初始化等准备任务(先执行)。
tearDown线程组-测试后的清理工作(后执行)。
逻辑控制器速查
仅一次控制器-登录等只需执行一次的操作。
循环控制器-重复执行一组请求。
事务控制器-多个请求合并为一个事务统计。
If控制器-按条件决定是否执行。
吞吐量控制器-控制不同业务的操作比例。
随机控制器-随机选择一个子请求执行。
断言速查
响应断言-检查状态码或响应文本。
JSON断言-验证JSON响应中的字段值。
大小断言-检查响应数据大小。
持续时间断言-验证响应时间是否在阈值内。
四、原则
采样器是唯一必选组件–每个线程组下至少有一个采样器。
组件按作用域生效–父级元件影响其所有子级采样器,注意层级放置。
调试与执行分离–调试时用结果树,压测时禁用它,只留聚合报告,避免干扰结果。
从简到繁–先跑通最小配置(线程组+采样器+聚合报告),再逐步添加参数化、断言、控制器等。