Loadrunner脚本开发——socket协议

Step1:脚本注释

/*

  • 脚本编写信息描述:
  • 项目名称:
  • 脚本功能:
  • 版 本 号:
  • 交易路径:
  • 编码语言:
  • 开发协议:
  • 作 者:
  • 时 间:
    */

#include “lrs.h”

Step1定义变量
Action()
{

int result = -1; 					      // 存放建立连接的结果
char mystr[8];						  // 存放socket连接句柄名称的字符数组
char ESBsendbuf[960];		  // 存放整个报文数组
char *ReturnData = NULL;    // 存放返回报文的指针
char sendlen[9];                     // 存放发送报文长度的字符串数组 

// 初始化字符数组
memset(mystr, 0 , sizeof(mystr));
memset(ESBsendbuf, 0, sizeof(ESBsendbuf));
memset(sendlen, 0, sizeof(sendlen));

// 组报文
sprintf(ESBsendbuf, "%s", lr_eval_string("00000825"
                       "{\"BODY\": "
                                         "{\"TERMINAL_ID\": \"20000007\", "                       // ATM终端号
                                         "\"TRAN_CCY\": \"CNY\", "
                                         "\"BOP_INLAND_OFFSHORE\": \"1\", "
                                         "\"BASE_ACCT_NO\": \"<P_AcctNo>\", "                           // 卡号
                                         "\"PASSWORD\": \"111111\", "
                                         "\"CHANNEL\": \"02\", "
                                         "\"CHECK_OPTION\": \"10010\", "
                                         "\"TRAN_AMT\": \"0.01\", "
                                         "\"CUP_DATE\": \"<P_Date>\", "
                                         "\"TRACK2\": \"6231207640110165474=28072202960000000\", "                                 // 二磁道信息
                                         "\"TRAN_TYPE\": \"AC01\", "
                                         "\"CUP_AREA_CODE\": \"05438716\"}, "							// 受理方标识码
                       "\"LOCAL_HEAD\": {}, "
                       "\"APP_HEAD\": "
                                         "{\"TOTAL_FLAG\": \"E\", "
                                         "\"PGUP_OR_PGDN\": \"1\", "
                                         "\"TOTAL_NUM\": \"-1\", "
                                         "\"CURRENT_NUM\": \"0\"}, "
                                         "\"SYS_HEAD\": {\"USER_LANG\": \"CHINESE\", "
                                         "\"SERVICE_CODE\": \"MbsdCore\", "
                                         "\"SOURCE_TYPE\": \"40\", "
                                         "\"SEQ_NO\": \"UPY<P_DateTime><P_VuserId><P_Rand6><P_IterationNum>\", "
                                         "\"MESSAGE_TYPE\": \"1000\", "
                                         "\"BRANCH_ID\": \"<P_telBranchId>\", "							// 柜员机构号
                                         "\"USER_ID\": \"<P_VmUserId>\", "								// 虚拟柜员号
                                         "\"PROGRAM_ID\": \"CD\", "
                                         "\"MESSAGE_CODE\": \"6009\", "
                                         "\"TRAN_TIMESTAMP\": \"<P_Time>\", "
                                         "\"TRAN_MODE\": \"ONLINE\", "
                                         "\"SOURCE_BRANCH_NO\": \"AGREEAFE.nodeafe.RZPK\", "
                                         "\"TRAN_DATE\": \"<P_Date>\"}}"));

sprintf(sendlen, "%008d", strlen(ESBsendbuf)-8);

memcpy(ESBsendbuf, sendlen, 8);

sprintf(mystr, "%s", lr_eval_string("ESB<P_SockID>"));

Step3 创建连接

result = lrs_create_socket(mystr, "TCP", "RemoteHost=7.0.6.55:20005", LrsLastArg); // 建立socket长连接

lr_start_transaction("ESB_核心_ATM本行取款");

Step4将报文放到缓存中

if( 0 == result){

	 lrs_set_send_buffer(mystr, ESBsendbuf, strlen(ESBsendbuf)); 

Step5发送报文

	 lrs_send(mystr, "buf1" , LrsLastArg); 	// 发送报文

	 lrs_set_recv_timeout(10,0);    // 设置接受报文的超时时间

Step6接收返回报文

	 lrs_receive(mystr, "buf2", "Flags=MSG_PEEK", LrsLastArg); // 接受返回报文

	 ReturnData = lrs_get_received_buffer(mystr, 0, -1, NULL);	// 获取返回报文

Step7检查点判断

	 if( strlen(ReturnData) < 8 ){

		 lr_end_transaction("ESB_核心_ATM本行取款",LR_STOP);		// 没有接受到报文返回,事务结束,标记为STOP

	 }else{

		 lrs_save_searched_string(mystr, NULL, "ReturnCode", "LB/BIN=RET_CODE\":\"", "RB/BIN=\"", 1, 0 ,-1); 	// 获取返回的ReturnCode码

		 if( strcmp( "000000", lr_eval_string("<ReturnCode>") ) == 0 ){

			 lr_end_transaction("ESB_核心_ATM本行取款",LR_PASS);	// 事务结束,返回PASS

		 }else{

			 lr_end_transaction("ESB_核心_ATM本行取款",LR_FAIL);	// 事务结束,返回FAIL

			 lrs_save_searched_string(mystr, NULL, "ReturnMsg", "LB/BIN=RET_MSG\":\"", "RB/BIN=\"", 1, 0 ,-1); 	// 获取返回的ReturnCode码

			 lr_convert_string_encoding(lr_eval_string("<ReturnMsg>"), LR_ENC_UTF8, NULL,"ErrorMsg");

			 lr_error_message("交易失败,错误信息【%s】,错误码【%s】,卡号【%s】",lr_eval_string("<ErrorMsg>"),lr_eval_string("<ReturnCode>"), lr_eval_string("<P_AcctNo>"));
		 }

	 }

Step8关闭socket

	 lrs_close_socket( mystr );	    // 关闭socket

	 ReturnData = NULL;	   // 释放ReturnData空间变量

}else{

	lr_error_message("创建socket连接失败,错误代码[%d]", result );    // 创建socket失败

	lr_end_transaction("ESB_核心_ATM本行取款", LR_STOP);    // 事务结束返回STOP
}



return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_29234631/article/details/88327266
今日推荐