当前位置:文档之家› LoadRunner WinSocket协议流程和常用函数详解

LoadRunner WinSocket协议流程和常用函数详解

1、创建Socket连接:
int rc = 0;


rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.1.93:9993", LrsLastArg);
// lrs_create_socket("连接名", "连接方式", "LocalHost=0", "RemoteHost=访问地址和端口", LrsLastArg);
if (rc==0)
lr_output_message("Socket was successfully created ");
else
lr_output_message("An error occurred while creating the socket, Error Code: %d", rc);


2、发送数据:

lrs_send("socket0", "buf0", LrsLastArg);
//将buf0中的内容发送到指定的端口socket


3、接收数据:
lrs_receive("socket0", "buf1", LrsLastArg);
//接受服务器返回数据保存到buf1
lrs_receive_ex("socket0", "buf2", "NumberOfBytesToRecv=126", LrsLastArg);
//强制指定接收报文的长度


4、断开Socket连接:
lrs_close_socket("socket0");


5、关于data.ws:
data.ws中存放的收发的数据包。格式为
;WSRData 2 1


send buf0 399
//send ( 数据包编号与脚本对应) ( 数据长度以字节Bytes 计算)
"GET /WebTours/ HTTP/1.1\r\n"
"Accept: */*\r\n"
"Accept-Language: zh-cn\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trid"
"ent/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729"
"; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"If-Modified-Since: Tue, 08 May 2007 15:40:23 GMT\r\n"
"Host: 172.16.5.235:1080\r\n"
"Connection: Keep-Alive\r\n"
"\r\n"
/*发送的数据包, 数据长度可以不指定, 会根据实际数据长度自动调整*/


recv buf1 126


"HTTP/1.1 304 Not modified\r\n"
"Server: Xitami\r\n"
"Date: Thu, 17 Apr 2014 03:17:28 GMT\r\n"
"Content-length: 0\r\n"
"Content-type: text/html\r\n"
"\r\n"
/*接收的数据包, 数据包内容可以为空,但数据长度必须指定 。在脚本执行过程不会校验数据内容,但会校验返回报文的长度与指定长度是否一致,如果长度不相等,LR会重复接收,知道10秒超时,这样会导致事务等待*/
/*使用 lrs_receive_ex()函数强制指定报文长度时, 指定长度必须小于或等于实际报文长度 ,否则也会出现重复接收的问题。但使用这种方法有时无法接收到完整数据,因为有时返回数据是动态的。此时可以使 用 lrs_set_receive_option()函数,设置lrs_receive()的 结束方式,具体方法见博文《 lrs_receive函数超时问题》 */


-1


6、关联
lrs_save_param("socket0",LRS_LAST_RECEIVED,"result",0,4);
// lrs_save_param("端口连接名",LRS_LAST_RECEIVED,保存参数名,偏移量,保存长度);
//放在lrs_receive()函数之后,保存最后一次接收的数据包。 LRS_LAST_RECEIVED表示最后一次端口返回。
//保存长度设置为-1时,为不指定长度
lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"result1","LB=304","RB=Server",1,0,-1);
// lrs_save_searched_string("端口名",LRS_LAST

_RECEIVED,"保存参数名","LB=左边界","RB=右边界",取值序号,偏移量,保存长度);
//取值序号即取第几出现的值
// //保存长度设置为-1时,为不指定长度
int lrs_save_param_ex ( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );
用法:
1)lrs_save_param_ex("socket0","user","aaaaThisisuserbuffer",5,10,NULL,"result");
2)lrs_save_param_ex("socket0","static","buf0",0,30,NULL,"result");
3)lrs_save_param_ex("socket0","received",NULL,9,11,NULL,"result");
/*
该函数有三种用法,分别是“user”、“static“、”received“。“user”是将用户自己定义的字符串保存到指定参数中;“static”是将data.ws中指定buf中的数据保存到指定“参数中”;“received”用法同lrs_save_param()。详细用法可参考博文《lrs_save_param_ex的用法》。
*/
/*在脚本中引用保存的参数时, 需使用,而不是{result} */














相关主题