51Testing软件测试论坛

标题: 关于lrs_receive函数的一个问题求助 [打印本页]

作者: z309466902    时间: 2012-11-19 17:16
标题: 关于lrs_receive函数的一个问题求助
问题描述:
1、使用loadrunner的socket测试UDP协议
2、此UDP协议在消息体前面添加了一些自定义的头(即私有协议)
3、获取随机数操作
步骤1:客户端发送获取随机数请求到服务器上,服务器会返回一个确认的ACK,表示服务器收到了请求,
步骤2:服务器在返回ACK后,接着返回了随机数(有重发机制,服务器判断客户端是否收到随机数的依据是客户端是否发送了ACK)
步骤3:客户端接收到随机数后,发送ACK给服务器,表示接收到了随机数,操作结束

问题:
1、发现服务器要发送3次的随机数给客户端后,才会继续进行发送ACK的操作,请问这个问题怎么解决,万分感谢
2、lrs_receive的接收结束原理是什么,为什么要在接收了一个随机数报后不执行“lrs_send("socket0","buf2", "TargetSocket=10.137.86.5:8089", LrsLastArg);“代码?


LR脚本
Action()
{
         lrs_create_socket("socket0", "UDP", "LocalHost=18998",  LrsLastArg);

         lrs_send"buf0", "TargetSocket=10.137.86.5:8089", LrsLastArg
         rs_set_recv_timeout2(5,0);

        lr_start_transaction("GetRamom");

        lrs_receive("socket0", "buf1", LrsLastArg);
        
        lrs_save_searched_string("socket0",NULL,"RAMOM1","LB=nonce\":","RB=\"",3,1,-1);
        lrs_save_searched_string("socket0",NULL,"resultCode","LB=resultCode\"","RB=,",3,1,-1);
  
        if (strcmp(lr_eval_string("<resultCode>"),"401")==0) {
                lr_end_transaction("GetRamom", LR_PASS);
        }
        
        lr_output_message("resultCode is : %s",lr_eval_string("<resultCode>"));
        lr_output_message("RAMOM is : %s",lr_eval_string("<RAMOM1>"));

        lrs_send("socket0","buf2", "TargetSocket=10.137.86.5:8089", LrsLastArg);
    return 0;
}
作者: z309466902    时间: 2012-11-19 17:17
补充下data文件
;WSRData 2 1

send  buf0 106
        "U"
        "\xaa\x00\x00\x00\x00\x01\x01\x01\x01"
        ";"
        "\x00\x00\x00\x00\x00"
        "Y<75558010312>{\"sno\":1,\"timeStamp\":\"2012-11-13 05:57:28.317\",\"userA"
        "ccount\":\"75558010312\"}\n"

recv  buf1 365


send buf2 0
        "U"
        "\xaa\x00\x01"
        "ォ"
        "\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"



-1
作者: z309466902    时间: 2012-11-20 10:11
请大神们帮忙看看下,纠结了很多天了!!!!!!
作者: Sayid    时间: 2012-11-20 10:16
1、你的脚本是不是设置了3次迭代?如果没有,那么就是你的buf1的接收长度与服务器实际返回不一致导致服务端重发了3次。
2、lrs_receive的接收原理就是有没有执行lrs_send,如果没有接收到数据lrs_receive会一直等待,除非socket状态为non-blocking。同时,接收长度不等于预期长度,会重新接收socket的数据,直到超时为止。
3、你试试下面这段action

Action()
{
        lrs_create_socket("socket0", "UDP", "RemoteHost=10.137.86.5:8089",  LrsLastArg);

        lrs_send("socket0", "buf0", LrsLastArg);
        lrs_set_recv_timeout2(5,0);

        lr_start_transaction("GetRamom");

        lrs_receive("socket0", "buf1", LrsLastArg);
        
        lrs_save_searched_string("socket0",NULL,"RAMOM1","LB=nonce\":","RB=\"",3,1,-1);
        lrs_save_searched_string("socket0",NULL,"resultCode","LB=resultCode\"","RB=,",3,1,-1);
  
        if (strcmp(lr_eval_string("<resultCode>"),"401")==0) {
                lr_end_transaction("GetRamom", LR_PASS);
        }
        
        lr_output_message("resultCode is : %s",lr_eval_string("<resultCode>"));
        lr_output_message("RAMOM is : %s",lr_eval_string("<RAMOM1>"));

        lrs_send("socket0","buf2", LrsLastArg);

        lrs_close_socket("socket0");

    return 0;
}




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2