loadrunner使用心得

 

最近项目用到的loadrunner终于告一段落,现在趁还记得LR的使用方法,写下自己在项目中遇到的困难和解决方法,方便有需要的同志。我不是专门研究LR的人,只是作为职场新人服从上级安排,临时研究,若有不合理的地方请多多包涵。

简单的说下用到的LR,socket协议~需要IP欺骗,监控服务器的性能,模拟用户与平台进行交互。

用户是IP认证的~一个IP唯一一用户。

 

遇到的难点主要有以下几个方面:

 

(1) IP认证

因为需要模拟大量的IP,所以需要借鉴LR的IP欺骗,具体的实现方法可以google一下。说的很详细。

难点在于为什么设置了IP欺骗的操作后,还是无法实现IP欺骗?

 

首先确认测试机是否是XP系统,我曾经在win7系统上实验,绞尽脑汁无法实现,平台的日志看到是同一的IP不同的端口建立的socket链接。但是在XP系统上,可以完美的实现IP欺骗。

 

其次要确认选择的是LR的scenario是否开启了”enable IP Spoofer“


loadrunner使用心得_第1张图片

 

(2)关于socket的buf内容(也就是data.ws),在测试的时候我们可能需要变量化参数,因为我这边的IP地址是和用户名是一一对应的。所以我在录制脚本完后,再需要变量化的地方右键,选择file,然后可以用其他工具批量生成用户名,再参数那边设置如下


loadrunner使用心得_第2张图片
 这样他会根据虚拟的IP顺序,一一对应上的用户名

 

(3)关于socket的response的判定。

LR不会自动给你判断response是否正确,这样需要我们加代码去判断,但是对于变长的buf内容我们如何去判断呢?如果采取固定写死的方法,写的太笨拙,不利于脚本的二次利用,再万能的google后,可以用

lrs_save_searched_string()方法进行判断。具体的含义英文好的看官网文档,英文不好的可以看各种博客~下面贴上我的代码,写的不太好见笑了~

 

lrs_send("socket1", "buf0", LrsLastArg);
lrs_receive("socket1", "buf1", LrsLastArg);
lrs_save_searched_string("socket1", LRS_LAST_RECEIVED, "result", "LB/BIN=result", "RB/BIN=\\\"", 1, 2, -1);

 

 

 这样会把上一个receive的buf内容里面第一个含有result的字符开始从你设置的"LB/BIN” 与“RB/BIN”之间部分截取下来,so我要比对result后面是什么~我关心的只是result是否是OK的,所以

 

 

re=lr_eval_string("");

	result = stricmp(re, tmp);

	if(result==0){

		lr_output_message("result is OK");

	}else{
		lr_output_message(" result is NOT OK");
		return -1;

	}

 return -1 是直接退出,貌似有点太粗鲁了。。。

 

(4)关于接收的buff与录制脚本的buff长度不一致,mismatch的解决办法

有时候因为这个那个原因,我们实际的buf可能与录制脚本的buff不太一样,所以导致系统提示XXX mismatch

这时候我的处理办法很简单,加入lrs_set_receive_option(EndMarker, StringTerminator , "XXX");

其中XXX是你消息的结尾表示。譬如,

lrs_send("socket1", "buf0", LrsLastArg);

lrs_set_receive_option(EndMarker, StringTerminator , "");

lrs_receive("socket1", "buf1", LrsLastArg);

 

 

这样buf在读取的时候,读到/xml 就停止了,不会提示mismatch什么的,具体还是查查官方文档关于lrs_set_receive_option的用法~但是有一点一定要注意,lrs_set_receive_option好像是只起一次作用,所以在每个receive前面我都加了这个lrs_set_receive_option

 

(5)虚拟机与另外一台局域网下的物理机之间的设置

再记录win7的server之前,我想告诫一下自己多学习一下网络的基础知识。

win7物理机serverIP是  192.168.1.2   255.255.255.0     192.168.1.1

XP虚拟机设置的IP是    192.168.1.4   255.255.255.0      192.168.1.1

win7 ping不通XP虚拟机。。。 

XP虚拟机可以ping通 win7 sever,可以访问win7 server

但是XP虚拟机IP改为192.168.2.4 ,双方都ping不通了~

后来查了半天原因,忙上忙下解决不了,被逼无奈只能求助于高手,高手问了问我的需求后说,把子网掩码改大一点点就可以了。。。于是乎我改为以下设置

win7 server 是   192.168.1.2   255.255.0.0     

XP虚拟机    是   192.168.1.4   255.255.0.0     

不设置网关也不设置DNS,因为我的机器只需要虚拟机与server交互即可,其他的不在乎~

 

(6)XP虚拟机如何远程监控win7的server

 

其实很简单,

首先WIN7开启服务Remote Procedure call、Remote Procedure Call (RPC) Locator、Remote Registry

其次右击“我的电脑”——“管理”——“共享文件夹”——选择“共享”,查看是否存在C$,如若不存在就要新建一个。

然后在测试机,也就是XP虚拟机下,在地址栏输入\\win7的IP地址\C$  回车,再弹出的对话框输入win7系统的用户名和密码,如果能登陆成功,就可以了

最后再测试机XP虚拟机的LR的scscenario的下按照如图设置
loadrunner使用心得_第3张图片
 选择add measurements 然后点击add 输入win7的IP 然后选择vista 然后确定,就可以了

 

(7)关于LR的transaction的理解

起初我总是录制完脚本,然后一同乱改,没有加入transaction的概念,最后总是觉得很怪异,后来加入transaction,才发现原来如此美妙。

起因是我们需要对响应时间进行分析,优化工程代码,开始我决定用timer,也就是LR自带的定时器,发现这样只能算出用时多少,不能算avgtime,后来再某一LR_send与LR_receive之间加入transaction的定义,才发现,原来如此简单,不多说,贴上我的例子,大家参考

lr_start_transaction("demo transaction");
        
lrs_send("socket1", "buf0", LrsLastArg);

lrs_set_receive_option(EndMarker, StringTerminator , "");

lrs_receive("socket1", "buf1", LrsLastArg);

lr_end_transaction("demo transaction",LR_AUTO);

 这样在脚本的log中会出现Notify: Transaction "demon transaction" ended with "Pass" status (Duration: 0.2552).

再scenario中会出现

 

loadrunner使用心得_第4张图片
 
 
好了,目前能记录的就这么多,以后再遇到再记下来~感谢~
 

你可能感兴趣的:(loadrunner,loadrunner)