loadrunner socket 测试
来源:互联网 发布:苹果经常无法加入网络 编辑:程序博客网 时间:2024/04/24 14:54
ACITON:
#include "lrs.h"
//定义全局变量:retmsg返回的报文,接收报文长度
char g_retmsg[4048];
int g_retlen=0;
//报文头的长度:使用的8583的报文,12个字节的报文头部信息,最后的4个字节的字符表示后续报文的长度
int g_headlen=12;
//报文长度的偏移量,和表示长度的字节数
int g_offset=8;
int g_msglen=4;
Action()
{
char sResponse[3];//8583的返回码
int iRes_off=g_headlen+2;//8385 39域所在偏移量
int iRet=-1;//自定义接收报文函数返回值
//清空接收报文的BUFF 全局变量
memset(g_retmsg,0x00,sizeof(g_retmsg));
memset(sResponse,0x00,sizeof(sResponse));
lr_start_transaction("HF_QUERY");//定义交易名称
lrs_set_recv_timeout(30,0);//建立连接前的超时时间
lrs_set_recv_timeout2(60,0);//接收超时时间
//创建SOCKET 通讯连接
lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:60000",LrsLastArg);
//发送报文
lrs_send("socket0", "buf0", LrsLastArg);
iRet=custom_lrs_receive("socket0", "buf1", LrsLastArg);
if(iRet!=0)
{
lr_message("交易失败,接收报文失败!");
lrs_close_socket("socket0");
lr_end_transaction("HF_QUERY", LR_FAIL);
}
else
{
lr_message("接收报文成功!");
}
memcpy(sResponse,g_retmsg+iRes_off,2);
lr_output_message("------sResponse = [%s]-------",sResponse);
if(memcmp(sResponse,"00",2)==0)//交易成功
{
lrs_close_socket("socket0");
lr_end_transaction("HF_QUERY", LR_PASS);
}
else{
lrs_close_socket("socket0");
lr_message("交易失败返回码失败");
lr_end_transaction("HF_QUERY", LR_FAIL);
}
return 0;
}
//自定义通讯函数,用于接收8583的不定长的报文格式
//接收到的包文件放入到 全局变量 g_retmsg,和g_retlen中
//参数说明 :sock_desc (socket句柄) ,buf_desc (data中的接收buf名称) ,dummy 这个参数没有什么用
int custom_lrs_receive(char *sock_desc, char *buf_desc,void *dummy)
{
int rc;
int buf_len = g_headlen;//报文头的长度
char szBytesLength[30];
char *buf = NULL, *pszError, *pszLastChar;
char sMsgLen[20];
memset(sMsgLen,0x00,sizeof(sMsgLen));
memset(szBytesLength,0x00,sizeof(szBytesLength));
//首先接收报文头的长度:g_headlen=12
//rc = lrs_receive_ex(sock_desc, buf_desc, "NumberOfBytesToRecv=12", LrsLastArg);
lr_output_message("----------- RECICVER start -----------");
sprintf(szBytesLength,"NumberOfBytesToRecv=%d",g_headlen);
rc = lrs_receive_ex(sock_desc, buf_desc,szBytesLength,LrsLastArg);
if (rc!= 0) //正常情况下函数返回为0,非0表示函数有错误
{
lr_error_message("ERROR: 接收报文头错误 Error_code= %d", rc);
return -1;
}
//判断前6个字节是否接受成功
lrs_get_last_received_buffer(sock_desc, &buf, &buf_len);
if (buf == NULL || buf_len != g_headlen)
{
lr_error_message("ERROR:接收报文头错误,长度不符,或者buff未接收 BUFF=[%s]", buf_desc);
return -1;
}
//复制报文头到全局BUFF中
#include "lrs.h"
//定义全局变量:retmsg返回的报文,接收报文长度
char g_retmsg[4048];
int
//报文头的长度:使用的8583的报文,12个字节的报文头部信息,最后的4个字节的字符表示后续报文的长度
int
//报文长度的偏移量,和表示长度的字节数
int
int
Action()
{
}
//自定义通讯函数,用于接收8583的不定长的报文格式
//接收到的包文件放入到 全局变量 g_retmsg,和g_retlen中
//参数说明 :sock_desc (socket句柄) ,buf_desc (data中的接收buf名称) ,dummy 这个参数没有什么用
int custom_lrs_receive(char *sock_desc, char *buf_desc,void *dummy)
{