新手求助:如何用JMeter或LoadRunner基于AMQP协议测试ActiveMQ Artemis
用AMQP协议测试ActiveMQ Artemis(JMeter & LoadRunner 实操指南)
一、JMeter 测试步骤
1. 准备依赖包
- 从ActiveMQ Artemis安装目录里找到
artemis-amqp-protocol-xxx.jar(xxx为对应版本号)、netty-all-xxx.jar、proton-j-xxx.jar这几个核心包,复制到JMeter的lib/ext目录下,重启JMeter生效。
2. 配置测试计划
- 新建测试计划,添加线程组(按需设置并发数、循环次数等参数)。
- 线程组下添加AMQP Connection Configuration元件:
- 填写Broker地址:格式为
amqp://[用户名]:[密码]@[IP]:[端口],默认AMQP端口是5672。 - 连接超时、心跳间隔这些参数新手用默认值即可。
- 填写Broker地址:格式为
3. 添加消息发送/接收元件
发送消息:
- 线程组下添加AMQP Publisher元件:
- 填写目标地址(Queue或Topic名称,格式如
queue://testQueue)。 - 设置消息内容:可直接写固定字符串,或用JMeter函数生成随机内容,比如
${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}。 - 可选配置:消息持久化、优先级等属性。
- 填写目标地址(Queue或Topic名称,格式如
接收消息:
- 线程组下添加AMQP Consumer元件:
- 填写与发送端一致的目标地址。
- 设置接收超时时间(比如5000毫秒),超时未收到消息会标记为失败。
- 可选配置:是否自动确认消息。
4. 添加监听器
- 添查看结果树、聚合报告等监听器,用于查看测试结果、吞吐量、响应时间等性能数据。
5. 运行测试
- 点击运行按钮,通过监听器排查连接失败、消息收发失败等问题(常见原因:账号密码错误、Broker端口未开放、协议未启用)。
二、LoadRunner 测试步骤
1. 选择协议
- 打开LoadRunner Virtual User Generator(VuGen),新建脚本时选择Custom > AMQP协议(若找不到需安装对应插件,LoadRunner默认支持AMQP)。
2. 编写核心脚本
初始化连接(vuser_init()):
amqp_connection_params_t conn_params; amqp_connection_handle_t conn; // 初始化连接参数 memset(&conn_params, 0, sizeof(conn_params)); conn_params.host = "你的Broker IP"; conn_params.port = 5672; conn_params.username = "用户名"; conn_params.password = "密码"; conn_params.vhost = "/"; // 默认虚拟主机 // 建立连接 conn = amqp_connect(&conn_params); if (conn == AMQP_CONN_HANDLE_INVALID) { lr_error_message("连接Broker失败"); return -1; }
发送消息(Action()):
amqp_message_t msg; amqp_basic_properties_t props; // 初始化消息属性 memset(&props, 0, sizeof(props)); props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG; props.content_type = amqp_cstring_bytes("text/plain"); props.delivery_mode = 2; // 持久化消息 // 设置消息内容 msg.body = amqp_cstring_bytes("测试消息内容"); msg.body_len = strlen("测试消息内容"); // 发送到指定队列 if (amqp_basic_publish(conn, "", amqp_cstring_bytes("testQueue"), 0, 0, &props, &msg) != AMQP_STATUS_OK) { lr_error_message("发送消息失败"); }
接收消息(Action()):
amqp_envelope_t envelope; amqp_status_t status; // 订阅目标队列 status = amqp_basic_consume(conn, "", amqp_cstring_bytes("testQueue"), amqp_empty_bytes, 0, 1, 0, amqp_empty_table); if (status != AMQP_STATUS_OK) { lr_error_message("订阅队列失败"); return -1; } // 接收消息 status = amqp_consume_message(conn, &envelope, NULL, 0); if (status == AMQP_STATUS_OK) { lr_output_message("收到消息:%.*s", envelope.message.body.len, (char*)envelope.message.body.bytes); amqp_destroy_envelope(&envelope); } else { lr_error_message("接收消息失败"); }
关闭连接(vuser_end()):
amqp_close_connection(conn, AMQP_REPLY_SUCCESS);
3. 调试与场景配置
- 点击“Run”调试脚本,根据报错调整参数;调试通过后,在LoadRunner Controller中创建场景,设置并发用户数、运行时间等,运行后查看性能指标。
三、新手必看注意事项
- 确认ActiveMQ Artemis已启用AMQP协议:检查Broker的
broker.xml配置文件,确保<acceptor>节点包含AMQP配置,比如<acceptor name="amqp">tcp://0.0.0.0:5672?protocols=AMQP</acceptor>。 - 测试前先用AMQP客户端(如qpid-tools)手动验证Broker连通性,排除Broker本身的问题。
- 并发测试时注意Broker的资源限制(内存、磁盘),避免压垮服务。
内容的提问来源于stack exchange,提问作者User0908
相关产品推荐
相关产品推荐

