51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5763|回复: 3
打印 上一主题 下一主题

[求助] 关于lrs_receive函数的一个问题求助

[复制链接]

该用户从未签到

跳转到指定楼层
#
发表于 2012-11-19 17:16:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
5测试积点
问题描述:
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;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2016-4-7 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2012-11-20 10:16:03 | 只看该作者
    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;
    }
    回复

    使用道具 举报

    该用户从未签到

    2#
     楼主| 发表于 2012-11-20 10:11:12 | 只看该作者
    请大神们帮忙看看下,纠结了很多天了!!!!!!
    回复

    使用道具 举报

    该用户从未签到

    1#
     楼主| 发表于 2012-11-19 17:17:29 | 只看该作者
    补充下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
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-24 17:13 , Processed in 0.073934 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表