51Testing软件测试论坛

标题: 请教关于socket脚本中参数化的问题 [打印本页]

作者: runny15    时间: 2012-6-26 12:38
标题: 请教关于socket脚本中参数化的问题
场景是这样的,我的脚本一共有三个步骤,分别是(client->server)获取终端id,终端注册,用户注册,然后每一步服务器都会有相应的应答。期间,终端注册需要用获取终端id步骤中recv到的报文中服务器传回来的id号,然后要在终端注册中传id号+mac+ip+time等等,然后用户注册就是用户名+id+mac+ip等等,单独一个用户进行这三步的脚本已经实现,发送的buf采用的是lrs_set_send_buffer+lrs_length_send的方式发送我自己编的结构体的内容,然后recv到的报文再保存到另一个准备好的结构体中,现在我想要进入controller开始性能测试,所以需要先将mac、ip参数化,但是我试了两种方法:1像录制web协议一样直接在脚本中将参数右键参数化,不可用,在send的buf日志中显示发送的就是参数化的名称:“<mac>”,而不是我参数化的实际值00-00-00-00-00-01;2参考书上说的使用lrs_save_param_ex,但是这个函数貌似只能用data.ws中buf的数据来参数化,然后结合lrs_send发送buf,可是我的脚本根本就没用data.ws来发实际的数据(因为使用了lrs_set_send_buffer+lrs_length_send),所以我现在遇到的问题是:
【怎样在lrs_set_send_buffer+lrs_length_send的前提下在脚本中做到参数化,而不用data.ws】
ps:
因为代码太长了,所以截取部分结构体放上来给大家分析:
【终端注册的结构体】:
typedef struct terminalreg_req
{
char  ver;     //°?±?o?£?0x01
char  sn;      //serial number£?μ±?°2?×?D£?é
short nop;     //±£á?2??×??ú
int   type;    //±¨??ààDí
int   len;     //data×???μ?3¤?è   
    char  id[12];          //terminal id
    int   idtype;          //terminal alive or login
    char  ip[16];          //terminal ip
    char  ipv6[16];       //terminal ipv6
    char  mac[20];         //terminal mac
    int   creat_time;      //terminal id creat time
    int   user_state;      //user online state
    char  user_name[32];   //user name
    char  domain_name[32]; //domain name
    char  version[20];     //client version
}uni_pkt_Treg_req;
uni_pkt_Treg_req *pktTreg;
【给结构体中的属性赋值】:
pktTreg->ver = 0x01;
pktTreg->type = TERMINAL_REG_REQ;
pktTreg->len = 160;
pktTreg->nop = 0;
pktTreg->idtype = 0;  
strcpy(pktTreg->ip,"200.104.0.82");
strcpy(pktTreg->mac,"00-00-00-00-00-01");
pktTreg->user_state = 0;
strcpy(pktTreg->version,"3.02.07.64");
strcpy(pktTreg->id,pktRecv2->tid);  //将第一步获取的终端id放到要发送的终端注册的结构体中
pktTreg->creat_time = pktRecv2->creat_time;  //同上一步的意义

(我就是想把“200.104.0.82”和“00-00-00-00-00-01”参数化,然后能够使用controller把这个值发出去。)
发送buf的函数:

  t_size = sizeof(uni_pkt_Treg_req);

【将组合好的结构体放到buffer中然后发送】:
  memcpy(bufferTregResp,pktTreg,sizeof(uni_pkt_Treg_req));
  lrs_set_send_buffer("socket0",(char*)bufferTregResp,t_size);
  lrs_length_send("socket0","buf4",0,LrsLastArg);  
  lrs_receive("socket0","buf5",LrsLastArg);

【在data.ws中的内容是这样子的】:
send buf4 8
"00000000"
recv buf5 40




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