51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3209|回复: 1
打印 上一主题 下一主题

[原创] loadrunner C脚本的一些函数使用方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-4-22 20:54:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直研究性能方面的测试工具.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帮助.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-4-28 09:49:54 | 只看该作者
一般不建议用socket
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-20 16:48 , Processed in 0.082907 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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