|
最近一直研究性能方面的测试工具.LR确实是好工具,先说一下工作的流程.
首先明确自己需要使用到的协议.我测试用到的是socket协议,主要的工作就是 建立连接-发送数据-接收数据-解析数据(字符串)-根据解析到的内容作出相应的动作-关闭连接.
1:录制业务流程,抓取发送/接受的数据包
2:分析数据包内容,发送/接受到包是否有关联性,顺序是否要求严格等.
3:根据需要测试的业务,提取相应的包.确定需要参数化的内容.列出需要用到字符串.
4: 根据需要测试的业务,编写脚本.
5:debug脚本.放入到Controller测试(需要注意的是,在Vuser中执行与Controller中跑多用户有很多地方不同,Vuser中通过,Controller不一定能通过,一定概要把log打开 多多分析原因)
在调试的时候可以按F10一步一步执行,并在Run-time Setting(F4)-log中设置Extende log 把下面几项可以都勾上,这样你能在log中看到你的参数情况和收发包的内容.方便调试
下面是使用winsocket时候 用到的一些函数.主要是自己使用到的.写出来与大家共享.
1)lrs_set_send_timeout(20,1);//设置消息发送超时时间 这个函数要放到Action最上面才能生效 前面的20标示时间 后面的1 指重发次数
2)lrs_create_socket("socket0", "TCP", "RemoteHost=xxx.xxx.xxx.xxx:9527", LrsLastArg); 创建socket连接
3)lrs_send("socket0", "buf0", LrsLastArg); //发送消息 其中buf0 就是你录制中获取的到buf 在右边的data.ws中.你可以参数化buf0里面内容.比如bug0的内容包含 登入服务器的 用户名 和 密码,你就可以对这两项进行参数化.在跑Controller的时候就可以模拟多用户登入
4)lrs_receive("socket0", "buf1", LrsLastArg); //接受消息 在socket0上接受服务器返回的数据,并与buf1(录制时候得到的)进行匹配,lr中有2种匹配方式,一种是完全匹配,即 当前服务器返回的buf必须与buf1内容完全匹配(其实也只是匹配收到的包的大小).或者指定部分内容匹配(这里需要用到另外一个函数).
5)lrs_set_receive_option(EndMarker,StringTerminator,"</C>"); //这个函数就是用来设置收到包含"</C>"内容消息即为成功,如果你不指定匹配方式,lr默认是完全匹配方式,很容易造成脚本执行不通过,或者堵塞等待 这个函数 大家可以google一下 或者在lr中按F1,看一下说明.
6)lr_vuser_status_message("test") 这个函数是在Controller中Vuser的Status上打印出内容"test" .这个函数很方便,在我们跑多用户的时候,可以打印出一些vuser的信息 方便查看vuser的状态
7)lr_error_message("test") 在Replay log输出信息 标示一条错误.
8)lr_continue_on_error(1);//遇到错误继续执行
lr_continue_on_error(4);//遇到错误停止执行脚本
后面参数可以查看帮助, 这个方法非常有用,比如在可能需要错误的时候,但是脚本又不得不执行下去,就可以组合使用这2个方法,例如
lr_continue_on_error(1);//遇到错误脚本继续执行
lrs_save_searched_string("socket1",NULL,"Param_return","LB=<M><C>",NULL,1,0,5);
lr_continue_on_error(4);//遇到错误停止执行脚本
上面方法中 为了获取左边界值是"LB=<M><C>"开始,后面5位的内容,这里如果不用lr_continue_on_error(1),脚本获取不到值就会退出.但是这里有可能服务器还没发送过来这个Buf,或者buf正在路上,在此循环的时候可能就读到这个buf了.这里就可以配套使用lr_continue_on_error
9)lr_output_messag();//在Replay log输出信息
10)lrs_save_searched_string()这个函数主要是在收到的字符串中 根据你指定的左右边界或者偏移量来获取相应的值,并保存到一个指定字符串中,比如
lrs_save_searched_string("socket1",NULL,"PageName","LB=>PAGE","RB=DOUT",1,0,-1) 获取PAGE 与 DOUT 中间的字符串并保存到PageName中去.更加相信的说明 大家可以参考LR帮助. |
|