服务器监听
//--------------创建连接----------------- rc= lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=<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); } //--------------创建连接----------------- |
收发协议
lrs_send("socket0", "buf0", LrsLastArg); //往“socket0”发送"buf0" lrs_set_receive_option(EndMarker, BinaryStringTerminator, "</html>"); //设置接收协议包选项,注"</html>"以实际定义协议为准,如果不设置次项。执行到lrs_receive的时候,log里面打印Waiting for writable socket 10 //secs, 0 usecs,都需要等待10秒钟。是这样的,因为你在data.ws中定义了recv buffer的长度,例如你定义为100,但是socket上的返回buffer长度不 //是100,这时候,loadrunner会尝试再次去读取,直到读到长度为100的buffer才算成功。 lrs_receive("socket0", "buf1","Flags=MSG_PEEK ", LrsLastArg); //将“socket0”中返回的数据存放到“buf1”中 |
参数配置
可能细心的同学已经发现了,buf0与buf1是从哪里来的。其实这俩兄弟是在data.ws中被定义的,如下所示:
;WSRData 2 1
send buf0 5120
"<参数化>"
recv buf1 1024
-1
5120:此数值为socket协议传输内容长度,切记严格输入正确长度值。
"<参数化>":为buf0所传输内容。相对于loadrunner的http协议参数用{}来说,socket协议参数化采用<>作为定义符。
接收参数判断
在做了接收之后,我们需要提取“buf1”中的某些关键字符作为通信成功标识。
//获取套接字上接收到的最后的缓冲区及其大小 lrs_get_last_received_buffer("socket0",&ActualBuffer,&numberOfResponse); //查询返回报文是否成功 position = (char *)strstr(ActualBuffer, passMsg); // strstr has returned the address. Now calculate * the offset from the beginning of str msgOk = (int)(position - ActualBuffer + 1); if(msgOk>0){ lr_end_transaction("核心对私维护", LR_PASS); lr_output_message("本次交易:%s",ActualBuffer); } else{ lr_end_transaction("核心对私维护", LR_FAIL); lr_error_message("本次交易:%s",ActualBuffer); } 关闭连接 //--------------断开socket-------------- lrs_disable_socket("socket0", DISABLE_SEND_RECV); //--------------关闭socket-------------- lrs_close_socket("socket0"); |
六、总结
简要描述了利用Loadrunner编写socket性能测试脚本的过程,如有错漏,请予以指正。