👉 ✈手机屏幕横着看更精彩 *_*. . . . . . 大 江 东 去,浪 淘 尽, 千 古 风 流 人 物。 故 垒 西 边, 人 道 是, 三 国 周 郎 赤 壁。 乱 石 穿 空, 惊 涛 拍 岸, 卷 起 千 堆 雪。 江 山 如 画, 一 时 多 少 豪 杰。 遥 想 公 瑾 当 年, 小 乔 初 嫁 了, 雄 姿 英 发。 羽 扇 纶 巾, 谈 笑 间, 樯 橹 灰 飞 烟 灭。 故 国 神 游, 多 情 应 笑 我, 早 生 华 发。 人 生 如 梦, 一 尊 还 酹 江 月。 (。_°)☆\(- – ) 👈

LR之MQ协议性能测试脚本

  之前为MQ协议的脚本,也是忙的焦头烂额,又是查阅网上资料,又是询问盆友的,可谓千辛万苦,但又因网上关于MQ的资料及性能测试的很少,有些根本没有太大的实用性,即为了之后方便查阅,也同时为了大家解决工作中遇到相同的问题,整理了一下编写MQ性能测试脚本的方法。

  场景:为linux服务器上新建一个队列管理器QM1,可查看上篇MQ消息队列搭建命令及方法;再通过java脚本,调用QM1的相关参数向QM1发送消息,观察消息是否正常送达。

java脚本只为消息队列发送报文交易(本人亲测都可以的哦 ^_^)

1. 报文在脚本中拼接方法:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.ibm.mq.*;
import lrapi.lr;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Actions
{
    String PutQueueManagerName = "MQ1"; // 发送队列管理
    String PutQueueName = "MSG_QUE"; // 发送队列名,相当于前置机的接收队列
    String QueueChannel = "MSG_CHL"; // 通道名,要用服务器通道
    String IP = "188.123.123.123";//服务器主机IP
    int PutPort = 7001; // 发送端口号,相当于前置机的接收端口
    int CCSID = 1381; // 客户端Unix用819,windows用1381
    int OpenOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE; // 连接参数
    int PutDepth = 0; // 发送队列深度
    String SndTime = ""; // 当前发送时间

    MQQueueManager PutQueueManager = null; // 创建发送队列管理器对象
    MQQueue PutQueue = null; // 创建发送队列对象
    MQMessage PutMessage = new MQMessage(); // 创建发送消息对象
    MQPutMessageOptions PMO = new MQPutMessageOptions(); // 创建发送消息选项队列
    
    public int init() throws Throwable
    {
        // 发送队列的参数**********************************************
        MQEnvironment.hostname = IP; // 设置环境参数
        MQEnvironment.port = PutPort;
        MQEnvironment.CCSID = CCSID; 
        MQEnvironment.channel = QueueChannel;
        PutQueueManager = new MQQueueManager(PutQueueManagerName); // 连接发送队列管理器
        PutQueue = PutQueueManager.accessQueue(PutQueueName, OpenOptions, null, null, null); // 建立访问发送队列
        PutMessage.format = MQC.MQFMT_STRING; // 设置消息中应用数据的格式
        PutMessage.characterSet = 1381; // 设置字符集
        PutMessage.expiry = -1;    // 设置消息为不过期

        return 0;
    }//end of init


    public int action() throws Throwable
    {
        //java格式化时间方法
        Date date = new Date();
        SimpleDateFormat sim=new SimpleDateFormat("yyyyMMddHHmmss"); //例如:20200426091410
        SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2=new SimpleDateFormat("HH:mm:ss");
        String nowdate=sim.format(date);
        String nowdate1=sim1.format(date)+"T"+sim2.format(date); //例如:2020-04-26T09:14:10
       //System.out.println("+++++++"+ nowdate);
       //System.out.println("+++++++"+ nowdate1);
	
      lr.start_transaction("01_发送");
        
        PutQueueMessage("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
			"<Document xmlns=\"urn:cnaps:std:ccms:2010:tech:xsd:ccms.303.001.02\"" +
			" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
			"<FreeFrmt>" +
			"<GrpHdr>" +
			"<MsgId><nowdate></MsgId>" +
			"<CreDtTm><nowdate1></CreDtTm>" +
			"<InstgPty>" +
			"<InstgDrctPty>0000</InstgDrctPty>" +
			"<InstgPty>0000</InstgPty>" +
			"</InstgPty>" +
			"<InstdPty>" +
			"<InstdDrctPty>313501080608</InstdDrctPty>" +
			"<InstdPty>313501080608</InstdPty>" +
			"</InstdPty>" +
			"<SysCd>HVPS</SysCd>" +
			"</GrpHdr>" +
			"<FreeFrmtInf>" +
			"<MsgCntt>test</MsgCntt>" +
			"</FreeFrmtInf>" +
			"</FreeFrmt>" +
			"</Document>");
       
        lr.end_transaction("01_发送",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("01_发送退出关闭队列时出现错误,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
            ex.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        return 0;
    }// end of end

    // 发送消息+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    public void PutQueueMessage(String MyStr)
    {
        try
        {
            PutMessage = new MQMessage();
            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("01_发送",lr.FAIL);
            lr.error_message("01_发送 发送消息时出错,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode + "流水号为:" + SndTime);
            lr.exit(lr.EXIT_ITERATION_AND_CONTINUE, lr.FAIL);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }    
    }
}

 

  

2. 发送的报文通过脚本读取本地文件获得:(读取文件中文不会乱码)

/*
 * LoadRunner Java script. (Build: _build_number_)
 * 
 * Script Description: 
 *                     
 */
import java.io.File;
import java.io.FileWriter;
import java.io.FileInputStream;
import java.io.IOException;
import com.ibm.mq.*;
import lrapi.lr;

public class Actions
{
    String PutQueueManagerName = "MQ1"; // 发送队列管理器Q
    String PutQueueName = "MSG_QUE"; // 发送队列名,相当于前置机的接收队列
    String QueueChannel = "MSG_CHL"; // 通道名,要用服务器通道
    String IP = "188.123.123.123";//服务器主机IP 
    int PutPort = 7001; // 发送端口号,相当于前置机的接收端口
    int CCSID = 1381; // 客户端Unix用819,windows用1381
    int OpenOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE; // 连接参数
    int PutDepth = 0; // 发送队列深度
    String SndTime = ""; // 当前发送时间

    MQQueueManager PutQueueManager = null; // 创建发送队列管理器对象
    MQQueue PutQueue = null; // 创建发送队列对象
    MQMessage PutMessage = new MQMessage(); // 创建发送消息对象
    MQPutMessageOptions PMO = new MQPutMessageOptions(); // 创建发送消息选项队列
    
    public int init() throws Throwable
    {
        // 发送队列的参数**********************************************
        MQEnvironment.hostname = IP; // 设置环境参数
        MQEnvironment.port = PutPort;
        MQEnvironment.CCSID = CCSID; 
        MQEnvironment.channel = QueueChannel;
        PutQueueManager = new MQQueueManager(PutQueueManagerName); // 连接发送队列管理器
        PutQueue = PutQueueManager.accessQueue(PutQueueName, OpenOptions, null, null, null); // 建立访问发送队列
        PutMessage.format = MQC.MQFMT_STRING; // 设置消息中应用数据的格式
        PutMessage.characterSet = 1381; // 设置字符集
        PutMessage.expiry = -1;    // 设置消息为不过期

        return 0;
    }//end of init


    public int action() throws Throwable
    {
        SndTime = String.valueOf(System.currentTimeMillis()); // 获取当前发送时间,13位

        String MsgBody = read("E:\\LR项目资料\\测试\\beps.<NO>.xml");

	lr.start_transaction("01_发送");
        
        PutQueueMessage(MsgBody);
       
        lr.end_transaction("01_发送",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("01_发送退出关闭队列时出现错误,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode);
            ex.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        return 0;
    }// end of end

    // 发送消息++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    public void PutQueueMessage(String MyStr)
    {
        try
        {
            PutMessage = new MQMessage();
            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("01_发送",lr.FAIL);
            lr.error_message("01_发送 发送消息时出错,完成代码为:" + ex.completionCode + ",原因为:" + ex.reasonCode + "流水号为:" + SndTime);
            lr.exit(lr.EXIT_ITERATION_AND_CONTINUE, lr.FAIL);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }    
    }


    public static String read(String fileName){

	String MsgBody = "";
        String encoding = "UTF-8"; 
	FileInputStream in = null;

     try {

	 in = new FileInputStream(fileName);
	 int len = in.available();
	 byte[] b = new byte[len];
	 in.read(b);
	 MsgBody = new String(b,encoding);     
	 in.close();

	} catch (IOException e) {
	 e.printStackTrace();
	}

     return MsgBody;

    }



}

 

附件:

MQ jar包下载地址:

链接:https://pan.baidu.com/s/1WWJzuegvajO2aZ30erMmgg
提取码:a1am
复制这段内容后打开百度网盘手机App,操作更方便哦

 

posted @ 2019-06-13 17:50  S-Gavin  阅读(645)  评论(0编辑  收藏  举报