51Testing软件测试论坛
标题:
求教loadrunner场景运行winsock协议脚本不成功问题
[打印本页]
作者:
237667173
时间:
2012-4-12 20:00
标题:
求教loadrunner场景运行winsock协议脚本不成功问题
本帖最后由 237667173 于 2012-4-12 22:52 编辑
录制环境 lr11 winsock 协议. 录制.net程序, 脚本调试后回放正常(socket中send和receive包都能捕获到)
代码
int GetReceiveCharPoint(char* cSocket)
{
int iGReceive,iMaxSize = 2084000,iRCount = 0,iReturn = 0;
char cTmp[50];
lr_free_parameter("GetReceive");
itoa(iMaxSize,cTmp,10);
sprintf(cTmp,"NumberOfBytesToRecv=%d",iMaxSize);
do
{
iReturn = lrs_receive_ex(cSocket,"bufYY",cTmp,LrsLastArg);
iGReceive = lrs_get_last_received_buffer_size(cSocket);
lrs_save_param(cSocket,NULL,"GetReceive",0,iGReceive); iRCount++;
lrs_free_buffer("bufYY");
}while (iGReceive == iMaxSize) ;
lr_output_message(lr_eval_string("<GetReceive>"));
return iReturn;
}
int LrsSendAndReceive(char *buf_desc, int isReturn, int iTimeOut)
{
int iGetReceive,iJudge;
char cTmp[20];
lrs_create_socket("socket0", "TCP", "RemoteHost=<ServerIp>:<ServerPort>", LrsLastArg);
lrs_set_send_timeout(0,500);
lrs_set_recv_timeout(0,iTimeOut);
lrs_set_recv_timeout2(0,iTimeOut);
lrs_send("socket0", buf_desc, LrsLastArg);
if (isReturn) {
iGetReceive = GetReceiveCharPoint("socket0");
}
lrs_close_socket("socket0");
return iGetReceive;
}
action{
...
}
调用时都是直接调用LrsSendAndReceive函数进行发送的,回放时候很正常,但是在场景运行中(1个用户)都会获取不到数据, 用抓包工具查看后只发现lrs_create_socket时有保持tcp链接的数据,但看不到lrs_send数据,故也未有lrs_receive数据,有人见过类似现象吗.
作者:
237667173
时间:
2012-4-13 10:39
坑爹啊,帖子这么快就沉了,自己顶顶吧,难道问题很简单导致高手都不屑回答吗...
自己研究解决了,这条代码折腾的 lrs_set_send_timeout(0,500);
设置超时时间过短会导致在场景运行时候直接退出了,接收也是,想不通回放就能正常为啥场景运行时候就那么快超时结束.
再问个问题吧(有点死心会有人回答了..): 这个超时时间要设置多少合适.. 还是有什么能动态拼接数据包机制使得不用每次都等待那端固定的10s?
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2