LR中MQ协议交易脚本介绍
2016-05-02 19:52
253 查看
MQ是IBM的消息中间件。
Loadrunner是不直接支持MQ协议,但是loadrunner是java vuser,所以我们可以通过Loadrunner中调用MQ提供的jar包,模拟实现对MQ进行消息传输的功能。
1.准备环境,jdk环境,MQ的jar包。
MQ的jar,当安装MQ软件后,在安装目录下有jar lib目录,不知道要具体要用哪几个包,就全部增加。
2.开始脚本开发
详细脚本如下:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.ibm.mq.*;
import lrapi.lr;
public class Actions
{
String PutQueueManagerName = "QM_MBR_5500"; // 发送队列管理器名称,MQ服务器中队列管理器
String PutQueueName = "REQ.5500.CBS.NNS"; // 发送队列名,MQ应用取数据的队列
String QueueChannel = "SVRCONN_MBR5500"; // 通道名,要用服务类型的通道
String HostName = "10.14.1.10"; // MQ服务的IP地址
int PutPort = 65400; // 发送端口,MQ服务器中监听器的端口,
int CCSID = 1208; // 客户端Unix用819,windows用1381
int OpenOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE; // 连接参数
int PutDepth = 0; // 发送队列深度
MQQueueManager PutQueueManager = null; // 创建发送队列管理器对象
MQQueue PutQueue = null; // 创建发送队列对象
MQMessage PutMessage = null; // 创建发送消息对象
MQPutMessageOptions PMO = null; // 创建发送消息选项对象
public int init() throws Throwable
{
// 发送队列的参数**********************************************
MQEnvironment.hostname = HostName; // 设置环境参数
MQEnvironment.port = PutPort;
MQEnvironment.CCSID = CCSID;
MQEnvironment.channel = QueueChannel;
PutQueueManager = new MQQueueManager(PutQueueManagerName); // 连接发送队列管理器
PutQueue =PutQueueManager .accessQueue(queueName, openOptions); ; // 建立访问发送队列
PutMessage =new MQMessage();
PutMessage.format = MQC.MQFMT_STRING; // 设置消息中应用数据的格式
PutMessage.characterSet = 1208; // 设置字符集
PutMessage.expiry = -1; // 设置消息为不过期
return 0;
}//end of init
public int action() throws Throwable
{
lr.start_transaction("test");//设置开始事务
string msgbody ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><transaction>test</transaction>";//保存要发送报文
PutQueueMessage(msgbody);
//设置事务
lr.end_transaction("test",lr.PASS);
return 0;
}//end of action
public int end() throws Throwable
{
try
{
PutQueue.close(); //关闭队列
PutQueueManager.close();//关闭队列管理器
PutQueueManager.disconnect(); //断开连接
}
catch (MQException ex)
{
lr.error_message("测试,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
ex.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
return 0;
}// end of end
// 发送消息
public void PutQueueMessage(String MyStr)
{
try
{
PutMessage.write(MyStr.getBytes("UTF-8")); // 设置消息字体
PutQueue.put(PutMessage, PMO);// 将消息放入队列
PutQueueManager.commit(); // 提交事务处理
PutDepth = PutQueue.getCurrentDepth(); // 获取发送队列的深度
//System.out.println("++++++发送队列当前深度为:"+ PutDepth);
//System.out.println("=======发送报文是:" + MyStr);
PutMessage.clearMessage();
PutMessage = null;
}
catch (MQException ex)
{
lr.end_transaction("test",lr.FAIL);
lr.error_message("test,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
lr.exit(lr.EXIT_ITERATION_AND_CONTINUE, lr.FAIL);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
MQ协议通常是异步处理,所以此脚本中只发送MQ交易,不验证返回结果,所以交易响应时间无法统计。但是统计响应时间的方法一般有如下两种:从MQ日志中提取响应时间和从应用数据库中统计响应时间。
因此对应的开始时间和结束时间的统计可能有如下几种方式,需要大家在实际项目中灵活使用。
响应时间的开始时间:
1) 消息进入压力发起的MQ队列中的时间
2) 消息从进入到应用系统的MQ队列中时间
3) 应用系统从队列中取出消息开始处理的时间
响应时间的结束时间:
1) 应用系统处理完数据的时间
2) 应用系统将消息放入MQ队列的时间
对端MQ队列接收到MQ消息的时间
Loadrunner是不直接支持MQ协议,但是loadrunner是java vuser,所以我们可以通过Loadrunner中调用MQ提供的jar包,模拟实现对MQ进行消息传输的功能。
1.准备环境,jdk环境,MQ的jar包。
MQ的jar,当安装MQ软件后,在安装目录下有jar lib目录,不知道要具体要用哪几个包,就全部增加。
2.开始脚本开发
详细脚本如下:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.ibm.mq.*;
import lrapi.lr;
public class Actions
{
String PutQueueManagerName = "QM_MBR_5500"; // 发送队列管理器名称,MQ服务器中队列管理器
String PutQueueName = "REQ.5500.CBS.NNS"; // 发送队列名,MQ应用取数据的队列
String QueueChannel = "SVRCONN_MBR5500"; // 通道名,要用服务类型的通道
String HostName = "10.14.1.10"; // MQ服务的IP地址
int PutPort = 65400; // 发送端口,MQ服务器中监听器的端口,
int CCSID = 1208; // 客户端Unix用819,windows用1381
int OpenOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE; // 连接参数
int PutDepth = 0; // 发送队列深度
MQQueueManager PutQueueManager = null; // 创建发送队列管理器对象
MQQueue PutQueue = null; // 创建发送队列对象
MQMessage PutMessage = null; // 创建发送消息对象
MQPutMessageOptions PMO = null; // 创建发送消息选项对象
public int init() throws Throwable
{
// 发送队列的参数**********************************************
MQEnvironment.hostname = HostName; // 设置环境参数
MQEnvironment.port = PutPort;
MQEnvironment.CCSID = CCSID;
MQEnvironment.channel = QueueChannel;
PutQueueManager = new MQQueueManager(PutQueueManagerName); // 连接发送队列管理器
PutQueue =PutQueueManager .accessQueue(queueName, openOptions); ; // 建立访问发送队列
PutMessage =new MQMessage();
PutMessage.format = MQC.MQFMT_STRING; // 设置消息中应用数据的格式
PutMessage.characterSet = 1208; // 设置字符集
PutMessage.expiry = -1; // 设置消息为不过期
return 0;
}//end of init
public int action() throws Throwable
{
lr.start_transaction("test");//设置开始事务
string msgbody ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><transaction>test</transaction>";//保存要发送报文
PutQueueMessage(msgbody);
//设置事务
lr.end_transaction("test",lr.PASS);
return 0;
}//end of action
public int end() throws Throwable
{
try
{
PutQueue.close(); //关闭队列
PutQueueManager.close();//关闭队列管理器
PutQueueManager.disconnect(); //断开连接
}
catch (MQException ex)
{
lr.error_message("测试,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
ex.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
return 0;
}// end of end
// 发送消息
public void PutQueueMessage(String MyStr)
{
try
{
PutMessage.write(MyStr.getBytes("UTF-8")); // 设置消息字体
PutQueue.put(PutMessage, PMO);// 将消息放入队列
PutQueueManager.commit(); // 提交事务处理
PutDepth = PutQueue.getCurrentDepth(); // 获取发送队列的深度
//System.out.println("++++++发送队列当前深度为:"+ PutDepth);
//System.out.println("=======发送报文是:" + MyStr);
PutMessage.clearMessage();
PutMessage = null;
}
catch (MQException ex)
{
lr.end_transaction("test",lr.FAIL);
lr.error_message("test,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
lr.exit(lr.EXIT_ITERATION_AND_CONTINUE, lr.FAIL);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
MQ协议通常是异步处理,所以此脚本中只发送MQ交易,不验证返回结果,所以交易响应时间无法统计。但是统计响应时间的方法一般有如下两种:从MQ日志中提取响应时间和从应用数据库中统计响应时间。
因此对应的开始时间和结束时间的统计可能有如下几种方式,需要大家在实际项目中灵活使用。
响应时间的开始时间:
1) 消息进入压力发起的MQ队列中的时间
2) 消息从进入到应用系统的MQ队列中时间
3) 应用系统从队列中取出消息开始处理的时间
响应时间的结束时间:
1) 应用系统处理完数据的时间
2) 应用系统将消息放入MQ队列的时间
对端MQ队列接收到MQ消息的时间
相关文章推荐
- 二叉搜索树的后序遍历序列
- 软件工程6.7章读后感
- Spring Tool Suite 安装 Gradle 插件
- 项目1-点-圆-圆柱类族的设计(1)
- 知更鸟女孩
- Scrum团队
- 263. Ugly Number
- 类的高级概念
- 大数加法与乘法
- 软件工程--- 阅读《构建之法》第6~7章
- ef异常
- 链表——逆置
- [kuangbin带你飞]专题一 简单搜索 -I - Fire Game
- 网络编程--初识Volley之Request的使用
- php实现快速排序
- 【Android--Binder】关于通信机制之Binder机制(上)
- 关于网络子网的划分
- <canvas>学习笔记——translate()
- js中转换布局格式为绝对定位
- Spring 4 整合 Hibernate 5 技术