LR_socket协议测试实例

来源:互联网 发布:linux sleep 实现 编辑:程序博客网 时间:2024/05/16 13:46

前不久公司需要测试考勤服务器,这就需要写能够模拟实物考勤机的脚本,才开始还真不知道怎么开始,经过和公司的开发人员勾通,得知考勤机的考勤信息是无线传输,基于TCP/IP协议,最低层是socket协议。

于是我就开始了用LR还完成这件事。

(1)     LR选择socket协议

(2)     根据考勤机硬件生产商,提供的《鑫诺爱贝通公话软件接口规范》编写测试脚本

(3)     场景的设计、执行、监控、分析

 

       对于第13步我就不做说明了,主要对第2步做个详细解释。

 

       用到LRsocket协议,肯定我们要先学习那提供关于socket的方法

LR提供的方法并不是多很,但完全足够满足我们的测试需要。建议每一个方法都看看。不肯定对后面的编写脚本有很大帮助。

 

下面是这次测试脚本编写特别需要注意的地方和示例脚本:

(1)   发送的数据应该放到data.ws

 

如:lrs_send("socket0", "buf1", LrsLastArg);

data.ws中:

send buf1 9               这个9表示发送的长度,如果改成其它值,好象关系不大   

123456789

当在执行lrs_send方法时,会将“123456789”发送出去。 

(2)   接收的数据由data.ws指定的参数接收

如:lrs_receive("socket0", "buf2", LrsLastArg);

    recv buf2 24

    将接收到的数据保存到buf2中去,长度是24.

(3)   data.ws中,发送、接收的参数的位署不能乱放

如:参数靠左并不能有空格,不然会报错;数据需要换行,并用“”括起来,如果数据很长可换行,LR会自动拼接;后面的“-1”不能少;对于开始的“;WSRData 2 1,本人目前也未知,如果你知道请告诉我,请给我留言。QQ:408442756

(4)   在执行脚本时,如果接收出现长时间停顿现象,在日志中并报告长度不配,请注意修改:

Data.ws中的对应的接收参数希望的长度。如:recv buf5 24  表示:希望接收长度为24数据,并保存在buf5中。如果发送端的数据长度不是24,就会出现长时间停顿现象。因为LR只是自动地进行长度比较。对于数据内容的比较需要特定的方法。

5)对于设置事务、参数化、集合点、思考时间等等跟其它协议都是相同的。

 

示例脚本

#include "lrs.h"

vuser_init()

{  

       lrs_startup(257);

    lrs_create_socket("<socketName>", "TCP", "LocalHost=0","RemoteHost=192.168.0.6:8144",  LrsLastArg);//与服务器建立socket连接。

 

    lrs_send("<socketName>", "buf1", LrsLastArg);//发送buf1中的数据到服务器,开始公话认证

 

    lrs_receive("<socketName>", "buf2", LrsLastArg); //接收认证结果和时间同步,将结果保存到buf2

 

       lrs_save_param("<socketName>", NULL, "param1", 0, -1);//可以将buf2接收到的全部信息保存到param1中,-1表示全部接收。

 

       lr_output_message ("param1: %s", lr_eval_string("<param1>"));

 

    lrs_send("<socketName>", "buf3", LrsLastArg);//公话状态查询(刚连接)

 

    lrs_receive("<socketName>", "buf5", LrsLastArg);//公话状态接收(刚连接)

   

       return 0;

}

 

 

 

 

#include "lrs.h"

 

Action()

{  

 

    lr_think_time(1);

 

    lr_rendezvous("att");

 

       lrs_send("<socketName>", "buf4", LrsLastArg);   //学生刷卡

  

       lrs_receive("<socketName>", "buf7", LrsLastArg); //接收刷卡结果

 

   // lrs_save_param("<socketName>", NULL, "param3", 0, -1);

 

       //lr_output_message("param1: %s", lr_eval_string("<param3>"));

       return 0;

      

}

 

 

#include "lrs.h"

 

 

vuser_end()

{  

    int rc;

 

    lr_think_time(30);

 

       lrs_disable_socket("<socketName>", DISABLE_SEND_RECV);

 

   

       rc=lrs_close_socket("<socketName>");//关闭sokcet

 

       if (rc==0)

 

   lr_output_message("Socket 0 was successfully closed ");

 

   else

 

   lr_output_message("An error occurred while closing the socket, Error Code: %d", rc);

      

       lrs_cleanup();//清理socket资源

   

    return 0;

}

 

 

Data.ws文件内容:

;WSRData 2 1

 

send buf1 36         

"0036100000<MACHINE_ID>                "

 

recv buf2 11         

"00111000001"  

"002482000120100125175630"

 

send buf3 118          

"0118820001<MACHINE_ID>        "

"v1.1              "

"111                                                   ver1.00 2004/05/10"

 

recv buf5 24         

"002482000320100304190318"  

 

send buf4 78             

"0078040001<MACHINE_ID>        <CARD_ID>        123456123456123456<att_datetime>"

 

 

recv buf7 11          

"00100500001"

 

-1