LR知识点回顾及入门DOC.docx
- 文档编号:28406397
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:49
- 大小:88.50KB
LR知识点回顾及入门DOC.docx
《LR知识点回顾及入门DOC.docx》由会员分享,可在线阅读,更多相关《LR知识点回顾及入门DOC.docx(49页珍藏版)》请在冰豆网上搜索。
LR知识点回顾及入门DOC
Loadrunner简易面试教程
-------by:
Nosferatu
MSN:
Kalada@
LR协议选择
在学习LoadRunner协议选择之前,我觉得我们有必要了解一下协议的基本概念。
首先我们知道,计算机与计算机之间的通信都离不开通信协议,接着我们来说说通信协议的概念。
通信协议是什么,通信协议实际上是一组规定和约定的集合。
说白了就是两台或者多台计算机在通信时必须约定好本次通信做什么,例如是进行文件传输,还是发送电子邮件;然后约定怎样通信,什么时间通信等。
因此,通信双方要遵从相互可以接受的协议(相同或兼容的协议)才能进行通信,如目前因特网上广泛使用的TCP/IP协议等,任何计算机连入网络后只要运行TCP/IP协议,就可访问因特网。
了解了协议的基本概念和作用之后,我们来说说LoadRunner的协议选择。
LoadRunner首先是一个测试工具,其次是一个性能测试工具,然后是该工具是一个基于协议,也就是说LoadRunner测试的对象都需要使用通信协议,对于那些不使用通信协议仅仅进行本地处理的软件例如MicrosoftWord,LoadRunner就不适用。
说到通信协议我们来熟悉一下协议的分层,按照OSI的分层模型,分层结构如下:
OSI七层模型
TCP/IP协议
应用层
应用层(Application)
表示层
会话层
传输层
传输层(Transport)
网络层
网络层(Internet)
数据链路层
网络接口层(Network)
物理层
按照TCP/IP协议的分层,分层结构如下:
TCP/IP协议
对应的服务
应用层
WWW、SMTP、FTP、Telnet、Gopher、SNMP
Socket、NetBIOS
传输层
TCP、UDP
网络层
IP(ARP、RARP、ICMP)
网络接口层
Ethernet、X.25、PPP、SLIP
第一个分层是由OSI制定但不实用,后一个是目前广泛使用且被业界认做既定标准的协议分层,下文探讨的LoadRunner协议选择即按TCP/IP协议的分层模型讨论。
接着来说说LoadRunnerVuGen中的协议分类,VuGen(LR8.1)中的协议分类如下表所示:
javascript:
;"target=_self>应用程序部署解决方案
Citrix ICA
客户端/ 服务器
DB2 CLI、DNS、Informix、MS SQL Server、ODBC、Oracle(2 层)、Sybase Ctlib、Sybase Dblib 和 Windows Sockets 协议
自定义
C 模板、Visual Basic 模板、Java 模板、Javascript 和 VBScript 类型的脚本。
分布式组件
适用于 COM/DCOM、Corba-Java 和 Rmi-Java 协议。
电子商务
FTP、LDAP、Palm、PeopleSoft 8 mulit-lingual、SOAP、Web(HTTP/HTML) 和双 Web/WinSocket 协议。
Enterprise Java Bean
EJB 测试和 Rmi-Java 协议。
ERP/CRM
Baan、Oracle NCA、Peoplesoft-Tuxedo、SAP-Web、SAPGUI、Siebel-DB2 CLI、Siebel-MSSQL、Siebel-Web 和 Siebel-Oracle 协议
传统
终端仿真 (RTE)。
邮件服务
Internet 邮件访问协议 (IMAP)、MS Exchange (MAPI)、POP3 和SMTP。
中间件
Jacada 和 Tuxedo (6、7)协议。
流数据
Media Player (MMS) 和 Real 协议。
无线
i-Mode、VoiceXML 和 WAP 协议。
仔细研究发现LoadRunnerVuGen中的协议与文章开头所说的通信协议还是有一定的区别的,例如像LoadRunnerVuGen中的C 模板、Visual Basic 模板、Java 模板、Javascript 和 VBScript 类型的脚本均为开发语言,非通信协议,但LoadRunner即把它列在这儿,我们也就暂且认可。
了解了LoadRunner的协议类型之后,我们进入正式话题,即测试时如何选择协议。
正式测试之前,测试人员都需要预先熟悉被测对象,我们需要知道我们的被测对象是一个什么样的结构,是B/S结构还是C/S结构,了解这个之后,我们还需要了解被测对象所使用的协议是什么,也许有的人说我们的程序使用的是TCP/IP协议,其实他的回答跟我们需要知道的差别很大,因为我们知道,所有的通信软件都需要使用TCP/IP协议,为什么呢,因为这个协议是底层协议,所有应用层数据都必须经过这个协议封装之后才能向更底一层传输。
我们需要知道的是被测对象在应用层使用的是什么协议,就像我们使用邮件客户端发送邮件一样,我们知道使用的应用层协议是SMTP,使用邮件客户端接收邮件时使用的时POP3协议。
了解上述信息之后,我们的定位也就准确了,也就是说在LoadRunner中所说的协议基本上都是应用层协议(也有底层协议,例如 Windows Sockets),知道这点之后,我们在询问开发人员时就避免了不少麻烦,省的开发人员告诉你我们使用的是TCP/IP协议或者其他底层协议。
了解了LoadRunner中的协议之后,我们就进入协议确定阶段,协议的确定,通常有如下几种方法:
1、通过询问开发人员获知所使用的协议,通常这是最简单也是最直接的方法;因为没有人比开发人员更清楚他们所开发的应用程序使用的什么通信协议了;
2、通过概要或详细设计手册获知所使用的协议,在没有开发人员支持的情况,通过概要设计或详细设计获知所使用的协议不失为第二简便方法;
3、通过协议分析工具捕包分析,然后确定被测对象所使用的协议。
在使用协议分析工具分析协议过程当中一定要摒除底层协议,不要被底层协议所迷惑;
4、通过以往测试经验确定被测对象所使用的协议,当然通过这种方法确定的协议有一定的不准确性;
通过以上四种方法我们基本就确定了录制时应该选择什么协议,光确定协议是没有用的,最主要的是付诸行动,确定了协议之后,我们进入VuGen开始录制脚本,录制完成后看看是否生成相应脚本,如果脚本内容为空可能我们选择的协议不正确,我们可以尝试选择其他协议。
一般来说协议选择有如下原则:
B/S结构,选择WEB(Http/Html)协议;
C/S结构,可以根据后端数据库的类型来选择,如SybaseCTLib协议用于测试后台的数据库为Sybase的应用;MSSQLServer协议用与测试后台数据库为SQLServer的应用;对于一些没有数据库的Windows应用,可选用WindowsSockets底层协议;使用了数据库但使用的是ODBC连接的数据则选择ODBC协议;
对于有些使用纯JAVA编写的C/S结构的东东,采用JAVA,而且不能录制只能手工编写代码(工作量和难度还是有的)。
同样不能录制的还包括C、VBScript、VB、VBNetUser协议。
对于WindowsSockets协议来说,最适合的那些基于Socket开发的应用程序;但是由于网络通讯的底层都是基于Socket的,因此几乎所有的应用程序都能够通过Socket来录制,哪可能有人会问,哪既然Socket都能录制下来,还要那么多协议做什么,价格还贼贵,其实最主要的原因就是Socket录制的代码可读性较差,如果Socket的脚本可读性较高的话,实话就没有其他协议出现的必要性了。
对于邮件来说,首先要看你收邮件的途径,如果你通过WEB页面收发邮件,毫无疑问,你选择协议时就需要选择HTTP协议,如果你通过邮件客户端,像OutLook、FoxMail之类的,则需要根据操作不同选择不同的协议了,例如发邮件你可能要选择SMTP、收邮件你可能需要选择POP3。
什么时候需要关联loadrunner教程
1.关联的含义
关联(correlation):
在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。
其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同
一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值
2.什么时候需要做关联
要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程
过程说明:
客户端发出获得登录页面的请求
服务器端得到该请求后,返回登录页面,同时动态生成一个SessionId
当用户输入用户名密码,请求登录时,该SessionId同时被发送到服务器端
如果该SessionId在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败
在第一次录制过程中loadrunner把这个值记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了SessionId,此时客户端发出的请求就是错误的,为了获得这个动态的SessionId我们这里用到了关联。
所以我们得出结论:
当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联
当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析
自动关联包含两种机制:
一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:
自动关联所检测到的关联点不一定真的需要进行关联,这要我们更具实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联
另一种是loadrunner自带的自动关联规则,在录制脚本时,会根据这些规则自动创建关联
自动关联的步骤如下:
1.开启自动关联选项
刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在【RecordingOptions】>【InternetProtocol】>【Correlation】中启用关联规则,选中“Enablecorrelationduringrecording”,当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
也可以在【RecordingOptions】>【InternetProtocol】>【Correlation】中添加关联规则,达到自动关联的目的。
如果需要在回放脚本时,loadrunner自动检测需要关联的部分,那么需要在【Tools】>【generaloptions】>【Correlation】中选中“savecorrelationinformationduringreplay”和“showscanforcorrelationspopupafterreplayofvuser”,当回放玩脚本后,会弹出Scanactionforcorrelation窗口,进行关联点的搜索
2.录制脚本
录制脚本的过程在这里就不多说了
3.回放脚本
如果录制的脚本存在需要做关联的部分,那么在回放脚本时会出现错误
4.系统自动弹出检测关联对话框,或手动启动关联检测对话框
如果选择了【Tools】>【generaloptions】>【Correlation】中的“savecorrelationinformationduringreplay”和“showscanforcorrelationspopupafterreplayofvuser”,那么在回放脚本后会自动弹出“Scanactionforcorrelation”窗口,点击“yes”进行自动查找
如果没有选择上述设置,那么也可以按CTRL+F8启动关联自动搜索
5.查看系统检测出的关联点进行关联设置
如果在录制和回放中存在差异,loadrunner会在“CorrelationResults”中列出需要做关联的内容,用鼠标点击一条需要做关联的内容,点击“CreateRule”,系统会显示获得当前数据的规则,点击“yes”,完成规则的创建,同时查看脚本中增加了一个web_reg_save_param函数
也可以点击【Correlate】按钮创建关联,一笔一笔做,或是按下【CorrelateAll】让VuGen一次就对所有的数据建立关联。
注意:
由于CorrelationStudio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【CorrelateAll】。
6.回放脚本检查关联的正确性
创建好关联后,回放脚本检查关联的正确性
手动关联的过程大致如下:
第一步:
录制测试脚本,录制二遍
第二步:
使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联
第三步:
确定插入关联的位置
第四步:
在VIEWTREE中使用web_reg_save_param函数手动建立关联
第五步:
将脚本中有用到关联的数据,用参数代替
第六步:
验证关联的正确性
下面详细介绍:
第一步:
录制测试脚本,录制二遍
这一步就不用多说了,相同的操作,录制两份,分别保存
第二步:
使用WinDiff工具协助找出需要关联的数据
1.在第二份脚本中,点选VuGen的【Tools】>【ComparewithVuser…】,并选择第一份脚本。
2.接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。
WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。
(假如没看到红色字体,请点选【Options】>【View】>【ShowInlineDifferences】)。
查看二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。
注意:
lr_thik_time部分的差异可以忽略
找到不同的部分后,复制,然后打开RecordingLog或是GenerationLog,按Ctrl+F,在查找窗口中粘贴差异部分的内容,点击查找找到后,查看该部分的信息,确认是客户端的请求信息还是服务器回应的信息
如果出现在$$$$$$RequestHeaderForTransactionWithId3Ended$$$$$$这个部分,那证明是客户端发出的请求,这里是不需要做关联的
一般做的关联都是出现在******ResponseHeaderForTransactionWithId7******和******ResponseBodyForTransactionWithId7******中的部分。
在找到这个信息后,需要记录如下信息:
a.记录这个不同数据之前的内容和之后的内容
b.记录这个不同数据出现的位置,是Header还是Body
第三步:
确认插入关联的位置
我们在日志中找到了两次脚本的不同点的位置,根据这个位置,我们再确定是在哪个请求之后产生的,也就是说要定位发生不同点的response是由哪个request产生的,找到了这个请求的函数位置,我们就知道要往哪里做关联了
一般情况下关联函数写到发出请求的函数之前就可以了
第四步:
插入关联函数
在插入关联函数前,我们先介绍关联函数web_reg_save_param
一个web_reg_save_param函数的例子:
web_reg_save_param("sessionid",
"LB=Session_id:
",
"RB=;",
"Search=Body",
LAST);
在这里我们只介绍几个常用参数的含义
语法:
intweb_reg_save_param(constchar*ParamName,
参数说明:
ParamName:
存放得到的动态内容的参数名称
listofAttributes:
其它属性,包括:
Notfound,LB,RB,RelFrameID,Search,ORD,SaveOffset,Convert,SaveLen。
属性值不分大小写
LB(LeftBoundary):
返回信息的左边界字串。
该属性必须有,并且区分大小写。
RB(RightBoundary):
返回信息的右边界字串。
该属性必须有,并且区分大小写。
Search:
返回信息的查找范围。
可以是Headers,Body,Noresource,All(缺省)。
该属性质可有可无。
那么如何插入该关联函数呢?
1.将vugun切换到viewtree模式下
2.在左边的列表中,找到在上一步发出请求的函数,点击“右键”
选择“insertbefore”
3.在弹出的“addstep”对话框的“findfunction”中输入“web_reg_save_param”,点击“ok”
在“parametername”中输入,关联函数的名称,这里最好有含义,“sessionid”
在“leftboundary”中输入,刚才记录下的不同点字符串的左面的几个字符,定义左边界,Session_id:
在“rightboundary”中输入,刚才记录下的不同点字符串的右面的几个字符,定义右边界,;
在“searchin”中,选择“body”
点击“ok”
4.回到脚本编辑模式下,查看该函数插入是否正确
在发出请求的函数前应该看到:
web_reg_save_param("sessionid",
"LB=Session_id:
",
"RB=;",
"Search=Body",
LAST);
第五步:
将脚本中有用到关联的数据,用参数代替
如发出请求的参数如下,那么将原来服务器返回的动态值使用{sessionid}来替换:
web_submit_form("login.php_2",
"Snapshot=t2.inf",
ITEMDATA,
"Name=login","Value=wangjin",ENDITEM,
"Name=password","Value=wangjin",ENDITEM,
"Name=Session_id","Value={sessionid}",ENDITEM,
"Name=Submit","Value=Login",ENDITEM,
EXTRARES,
"URL=/media/images/border_bg_l.gif",ENDITEM,
"URL=/media/images/header_bg.gif",ENDITEM,
"URL=/media/images/th.gif",ENDITEM,
LAST);
第六步:
验证关联的正确性
回放脚本,验证关联的正确性
LR参数化
参数化的定义:
使用指定的数据源中的值来替换脚本录制生成的语句中的参数。
对Vuser脚本进行参数化的好处:
1、减小脚本的大小2、提供了使用不同的脚本的值执行脚本的能力
参数化涉及两个任务:
1、用参数替换Vuser脚本的常量值2、为参数设置属性和数据源“Selectnextrow”定义的是如何选择下一行数据。
该处有三个选项"Sequential","Random","Unique",Sequential:
顺序地向Vuser分配数据。
Random:
当测试开始运行时,“随机”方法为每个Vuser分配一个数据表中的随机值。
Unique:
为每一个Vuser的参数分配一个唯一的顺序值。
在这种情况下必须确保表中的数据对所有的Vuser和它们的迭代来说是充足的。
如果拥有20个Vuser并且要进行5次迭代,则测试者的表格中必须至少包含100个数值。
“Updatevalueon”定义的是什么时候更新数据值,备选项有每次迭代,每次出现和一次。
表 LoadRunner参数更新方法和数据分配
更新方法
数据分配方法
顺序
随机
唯一
每次迭代
对于每次迭代Vuser会从数据表中提取下一个值。
对于每次迭代,Vuser会从数据表中提取新的随机值。
对于每次迭代,Vuser会从数据表中提取下一个唯一值。
每次出现(仅数据文件)
参数每次出现时,Vuser将从数据表中提取下一个值,即使在同一次迭代中。
参数每次出现时,Vuser将从数据表中提取新的随机值,即使在同一迭代中。
参数每次出现时,Vuser将从数据表中提取新的唯一值,即使在同一迭代中。
一次
对于每一个Vuser,第一次迭代中分配的值将用于所有的后续迭代
第一次迭
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LR 知识点 回顾 入门 DOC