在JMeter中同时运行HTTP、JDBC和WebSocket脚本进行混合场景压测,方法是使用多个线程组,每个线程组独立模拟一种协议的用户行为,真实地反映生产环境的复杂负载。
第一步:环境准备
安装JMeter:建议使用 JMeter 5.6+ 版本,其对多协议支持更完善。
安装WebSocket插件:JMeter原生不支持WebSocket,需通过插件管理器安装。推荐使用WebSocket Samplers by Peter Doornbosch等插件。
添加JDBC驱动:将对应数据库(如MySQL)的JDBC驱动JAR包放入JMeter的lib目录下。
第二步:脚本设计和配置
采用多线程组方案是最直接的方式。每个线程组负责一种协议的测试脚本,并发数和运行方法可独立配置。
1. 通用配置
测试计划:根节点,可勾选独立运行每个线程组来控制执行顺序。
用户定义变量:在此处定义全局变量,如服务器IP、端口、数据库连接信息等,方便统一管理。
2. HTTP请求线程组配置
添加线程组:配置线程数(并发用户数)、Ramp-Up时间(启动所有线程的时长)等。
添加配置元件:HTTP请求默认值(统一管理服务器地址、端口)、HTTP信息头管理器。
添加取样器:HTTP请求,配置方法、途径、参数等。
添加断言:响应断言或JSON断言,证实返回结果。
3. JDBC请求线程组配置
添加线程组。
添加配置元件:JDBC Connection Configuration,配置数据库连接池信息。
Variable Name:连接池名称,如 jdbcPool。
Database URL:jdbc:mysql://host:port/db。
JDBC Driver class:驱动类名,如 com.mysql.jdbc.Driver。
Username/Password:数据库用户名和密码。
添加取样器:JDBC Request,编写SQL语句并选择Query Type(如Select、Update)。
4. WebSocket请求线程组配置
添加线程组。
添加取样器:WebSocket Open Connection,建立连接。
添加取样器:WebSocket request-response Sampler,模拟收发消息。
添加取样器:WebSocket Close,关闭连接,避免资源占用。
添加定时器:如固定定时器,模拟用户思考时间,使请求更真实。
跨线程组传参:各线程组独立运行。如果需传递数据,可使用 __setProperty() 将变量设为全局属性,再用 __P() 函数读取。
第三步:执行和监控
GUI调试:先在图形界面下,用少量用户(如1-2个)运行,通过查看结果树等监听器证实脚本正确性。
CLI执行:正式压测时,必须使用命令行(CLI)方式,以避免GUI消耗性能,影响测试准确性。
bash
jmeter -n -t /path/to/test_plan.jmx -l /path/to/results.jtl -e -o /path/to/report
-n:非GUI方式。
-t:测试计划文件途径。
-l:结果文件途径。
-e -o:生成HTML报告。
监控标准:注意聚合报告中的吞吐量、平均响应时间、错误率,以及各协议特有的标准(如WebSocket的连接数、消息吞吐量等)。
第四步:注意事项
资源消耗:混合压测消耗资源大。如果单机不足,可考虑分布式压测(Master-Slave方式)。同时,根据机器配置调整JMeter堆内存(如 -Xms4g -Xmx8g)。
权重分配:根据生产环境日志,为不同业务(线程组)分配合理的并发用户比例。
梯度加压:采用逐步增加负载的方式(如每阶段增加20%-30%并发),观察系统性能拐点。
数据隔离:保证各线程组使用的测试数据(如商品ID、用户账号)相互独立且充足,避免数据冲突影响结果。
超时设置:在HTTP请求默认值中合理设置连接和响应超时时间,避免因等待死连接而耗尽资源。
通过多线程组方案,可以灵活地在JMeter中创建混合协议压测场景。步骤可概括为:安装插件 - 设计多线程组 - 配置各协议取样器 - GUI调试 -CLI执行。