JMeter JSR223 Sampler连接MQ成功,如何发布多组数据SOAP消息?
使用JMeter的JSR223 Sampler向MQ发布带动态字段的SOAP消息示例
Groovy示例代码(推荐,性能优于BeanShell)
假设你已经通过JSR223 Sampler完成了MQ连接初始化(如获得QueueConnection、QueueSession、QueueSender实例),以下是发布动态SOAP消息的代码:
// 1. 定义SOAP消息模板,使用JMeter变量占位符 def soapTemplate = '''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tstprj="http://my.host.local/" xmlns:buy="http://my.host.local/"> <soapenv:Header/> <soapenv:Body> <buy:shopping> <product>${product}</product> <company>XYZ</company> <Quantity>${quantity}</Quantity> <size>${size}</size> <code>${code}</code> </buy:shopping> </soapenv:Body> </soapenv:Envelope>''' // 2. 替换模板中的动态字段(可直接使用JMeter变量,或自定义默认值) def finalMessage = soapTemplate.replace('${product}', vars.get('product') ?: 'soaps') .replace('${quantity}', vars.get('quantity') ?: '1') .replace('${size}', vars.get('size') ?: 'xl') .replace('${code}', vars.get('code') ?: 'sop:1234') // 3. 将消息转为TextMessage TextMessage message = session.createTextMessage(finalMessage) // 4. 发送消息到MQ队列(确保session、sender是你已初始化的有效实例) sender.send(message) // 可选:打印日志用于调试 log.info("已发送MQ消息:" + finalMessage)
关键说明
- 修正了原示例中
<code>标签的闭合错误(原示例误用</content>),并补充了buy命名空间声明,避免SOAP解析报错 - 动态字段可通过JMeter变量(如
${product})从CSV Data Set Config、User Defined Variables等元件中读取,实现多数据集循环发送 - 若尚未完成MQ连接初始化,可参考以下基础逻辑:
QueueConnectionFactory factory = new com.ibm.mq.jms.MQConnectionFactory() factory.setHostName("你的MQ主机地址") factory.setPort(1414) factory.setQueueManager("队列管理器名称") factory.setChannel("通道名称") factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP) QueueConnection conn = factory.createConnection("用户名", "密码") conn.start() QueueSession session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE) Queue queue = session.createQueue("目标队列名称") QueueSender sender = session.createSender(queue)
BeanShell示例代码
// 1. 定义SOAP消息模板 String soapTemplate = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tstprj=\"http://my.host.local/\" xmlns:buy=\"http://my.host.local/\">\n" + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + " <buy:shopping>\n" + " <product>${product}</product>\n" + " <company>XYZ</company>\n" + " <Quantity>${quantity}</Quantity>\n" + " <size>${size}</size>\n" + " <code>${code}</code>\n" + " </buy:shopping>\n" + " </soapenv:Body>\n" + "</soapenv:Envelope>"; // 2. 替换动态字段 String product = vars.get("product") != null ? vars.get("product") : "soaps"; String quantity = vars.get("quantity") != null ? vars.get("quantity") : "1"; String size = vars.get("size") != null ? vars.get("size") : "xl"; String code = vars.get("code") != null ? vars.get("code") : "sop:1234"; String finalMessage = soapTemplate.replace("${product}", product) .replace("${quantity}", quantity) .replace("${size}", size) .replace("${code}", code); // 3. 创建并发送消息 TextMessage message = session.createTextMessage(finalMessage); sender.send(message); // 调试日志 log.info("已发送MQ消息:" + finalMessage);
内容的提问来源于stack exchange,提问作者POTL12345
相关产品推荐
相关产品推荐

