51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

[转贴] LoadRunner的几个基本概念

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-5-18 21:16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
文章出处:转载peixuan
1.      事务(Transaction)

事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这样就定义了一个transaction,LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。

  插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner运行在

脚本中插入不限数量的事务。

脚本中事务的代码如下:

lr_start_transaction("事务名");

/* 中间代码 */

lr_end_transaction("事务名",LR_AUTO);

2.   集合点(Rendezvous)

集合点:是一个并发访问的点,在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner就会检查同时有多少用户运行到集合点,如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000人时,LoadRunner命令1000人同时去提交数据,并发访问的目的。

注意:集合点经常和事务结合起来使用,常放在事务的前面,集合点只能插入到Action部分,vuser_init和vuser_end中不能插入集合点。集合点函数如下:

lr_rendezvous("SubmitQueryData");

3.      IP Spoofer(IP欺骗)

  当运行场景时,虚拟用户使用它们所在的Load Generator的固定的IP地址。同时每个Load Generator上运行大量的虚拟用户,这样就造成了大量的用户使用同一IP同时访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会根据用户IP来分配资源,这些网站会限制同一个IP的登陆,使用等等。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问统一网站,这种技术称为“IP欺骗”。启用该选项后,场景中运行的虚拟用户将模拟从不同的IP地址发送请求。该选项非常的有用。注意:IP Spoofer在连接Load Generators之前启用。要使用IP欺骗,各个LoadGenerator机器必须使用固定的IP,不能使用动态IP(即DHCP)。



LoadRunner主要功能是模拟多用户对系统进行负载压力测试,默认情况下,多用户的生成器都是LocalHost,有些应用需要不同的IP访问,为了模拟真实操作,我们还必须模拟多个IP,IP Wizard工具就提供了生成多个ip的功能,IP Wizard是一个单独的程序,我们可以在开始菜单里面找到,你可以添加一个局域网内的IP段。添加后重启,在Win2k下使用Ipconfig/all查看到很多虚拟的IP,最后要在Controller里面选择enable ip spoofer.



4.      (Text/Image)检查点



对于查询类的脚本,一定要添加检查点,以保证在测试时结果的正确性.因为LR只要检测到网页的响应,就认为是pass而并不管当前网页内容的正确性.在进行压力测试时,为了检查Web服务器返回的网页是否正确,VuGen允许我们插入Text/Imag检查点,这些检查点验证网页上是否存在指定的Text或者Image,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。检查点的含义和WinRunner中的检查点功能基本上一致,这里就不再作过多的说明。

   举个例子:当我用loadrunner做压力测试的时候,
它的确能反馈给我各种服务器性能的数据,
但是在做B/S结构系统的测试的时候,
去发现如下问题:
loadrunner不能正确判断操作是否成功,
比如登录,我要测试200人同时登录,
但是我的login.jsp里面没有正确的关闭数据库的连接,
导致登录100人后,建立了100个数据库连接,
第101一个人登录的时候,由于超出数据库连接的最大数,
所以,jsp程序抛出了一个数据库异常。
但是页面的走向是正确的,所以loadrunner会认为程序是正确执行的,但是事实却并非如此

5.   LR脚本复用问题



   作为一款优秀的负载测试工具,LR的测试脚本有很好的复用性,参数化后的脚本,在应用没什么大的变化的情况下,一直是可以用的。甚至你在A服务器录制的脚本,如果做测试的时候,需要转移到B服务器上,你只需要用查找替换的功能将A服务器的IP地址换成B服务器就可以使用。



6.     理解Correlation(关联)



关联是用来解决脚本中存在的动态数据问题的.在7.8中,当你回放一次后,LR会自动录找你录制的时候和回放时候的差别,找出动态数据,并作成参数。举个我作的动态数据的例子,当用户登录时,会产生一个Sessionid号,访问结束后,该Sessionid便会失效。我录制的时候,在脚本里面获取到了该Sessionid,但当我再回放的时候,这个Sessionid已经无效了,所以,我需要把这个Sessionid作为一个动态数据,当我一登录的时候,便获取一个新的有效的Sessionid,然后通过web_reg_save_param("WCSParam_Text2",
"LB=ProcessID=",
"RB=;",
"Ord=1",
"RelFrameId=1",
"Search=body",
LAST);
函数把它保存下来。那么后面用到的页面中就可以调用WCSParam_Text2这个参数使用这个新的Sessionid号。这是个动态数据很典型的例子,

web_submit_data("w_onload_check.asp",
"Action=http://gsserver3/cwbase/sys/userlogin/w_onload_check.asp",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://gsserver3/cwbase/sys/userlogin/index.asp",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=hdclentip", "Value=chenjing", ENDITEM,
"Name=hdProcessID", "Value=F8E5ACCD372845C38C7E1981A342F703", ENDITEM,
"Name=selInstanceid", "Value=T01", ENDITEM,
"Name=TxtUserID", "Value={RYBH}", ENDITEM,
"Name=TxtPassword", "Value=cwpass", ENDITEM,
"Name=Txtkjdate", "Value=2003.01.06", ENDITEM,
"Name=selInstancetxt", "Value=性能测试用(中型数据库)", ENDITEM,
"Name=selInstance", "Value=T01", ENDITEM,
LAST);
web_url("loginpage.aspx",
"URL=http://gsserver3/cwbase/sys/menushow/loginpage.aspx?ProcessID={WCSParam_Text2}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t4.inf",
"Mode=HTML",
LAST);

左边界,右边界到底是个什么概念,

理解web_reg_save_param函数,

int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);



第一部分:参数名字,用双引号括起,逗号分开;

第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、SaveLen等,

第三部分:LAST,结束标志。

LB是左边界,RB是右边界,比如说吧,程序中有这么一个赋值,ProcessID=A53625E18440FCE81F26DCE712E65EBA;如果ProcessID的值是动态的,我想使用动态变量,那我设定查找左边界为LB=ProcessID=,右边界为;的字符,如果找到了,就替换成变量.

Search是指查找范围,就是说在哪里查找这些值,可以取这样几个值,我们一般设为ALL,Body等即可。

Headers (Search only the headers),

Body (search only Body data, not headers),

Noresource (search only the html body, excluding all headers and resources),

ALL (search Body and headers). The default value is ALL.



RelFrameID: The hierarchy level of the HTML page relative to the requested URL.一般取1



ORD: This parameter, also known as Instance, indicates the ordinal or instance of the match.一般取1

LR7.8已经为用户定义好了很多类型的关联,我们可以自己定义New rule,不过我在录制脚本的时候一般把系统的那些都关掉,定义自己的,只是有的时候,它不能自动关联,就干脆手工作了。需要关联的地方:一般是在有主键,不允许记录重复,和一些主程序中传递过来的参数,在后面要用到等情况才使用关联的,你可以先执行一遍,如果有些地方不允许重复可参数值无效,就会出错的,根据错误提示你可以判断出来,就知道需要关联了。一般需要关联的不多,我现在遇到的就是进程号,以及表的主键。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-31 08:59
  • 签到天数: 975 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2015-5-19 08:37:58 | 只看该作者
    多一些这样的分享
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 10:43 , Processed in 0.060674 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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