当前位置:文档之家› 如何在 LoadRunner 脚本中做关联(简体中文)

如何在 LoadRunner 脚本中做关联(简体中文)

如何在 LoadRunner 脚本中做关联(简体中文)
如何在 LoadRunner 脚本中做关联(简体中文)

如何在LoadRunner 脚本中做关联

当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的回应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。

当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站服务器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。

所以记录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。

何谓关联(correlation)?

所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)资料,转变成是来自服务器的、动态的、每次都不一样的资料。

举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要资料时,都会在资料中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要资料的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要资料,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页资料给VuGen了。

下面的图示说明了这样的情形:

当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的资料,当浏览器再送出网页B的情求时,这时就要用到ID=123的资料,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。

在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的资料,而不是用服务器新给的ID=456,整个脚本的执行就会失败。

要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它记录下来,放到某个参数中,并且取代掉脚本中有用到Session ID 的部份,这样就可以成功骗过服务器,正确地完成整个交易了。

哪些错误代表着我应该做关联(correlation)?

假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。

要如何做关联(correlation)?

关联(correlation)函数

关联(correlation)会用到下列的函数:

?web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。

语法:

web_reg_save_param (const char *ParamName, , LAST);

?web_create_html_param??web_create_html_param_ex:这二个函数主要是保留作为向前相容的目的的。

语法:

web_create_html_param (const char *ParamName, const char *LeftBoundary,

const char *RightBoundary );

web_create_html_param_ex (const char *ParamName, const char *LeftBoundary,

const char *RightBoundary, const char *Instance );

?建议使用 web_reg_save_param 函数。

详细用法请参考使用手册。在VuGen中点选【Help】>【Function reference】>【Contexts】>【Web and Wireless Vuser Functions】>【Correlation Functions】。

如何找出要关联(correlation)资料

简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。

VuGen提供二种方式帮助您找出需要做关联(correlation)的值:

1.自动关联

2.手动关联

自动关联

VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。

自动关联提供下列二种机制:

?Rules Correlation:在录制过程中VuGen会根据订定的规则,即时自动找出要关联的值。规则来源有两种:

o内建(Built-in Correlation):

VuGen已经针对常用的一些应用系统,如AribaBuyer、

BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、

Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,

这些应用系统可能会有一种以上的关联规则。您可以在【Recording

Options】>【Internet Protocol】>【Correlation】中启用关联

规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建

立关联。

您也可以在【Recording Options】>【Internet Protocol】>

【Correlation】检视每个关联规则的定义。

o使用者自订(User-defined Rules Correlation):

除了内建的关联规则之外,使用者也可以自订关联规则。您可以在

【Recording Options】>【Internet Protocol】>【Correlation】

建立新的关联规则。

Correlation Studio:有别于Rules Correlation,Correlation Studio 则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须

被执行过一次,Correlation Studio才会作用。Correlation Studio会

尝试找出录制时与执行时,服务器回应内容的差异部分,藉以找出需要关

联的资料,并建立关联。

Rule Correlation

请依照以下步骤使用Rule Correlation:

1.启用auto-correlation

1.点选VuGen的【Tools】>【Recording Options】,开启【Recording

Options】对话视窗,选取【Internet Protocol】>【Correlation】,

勾选【Enable correlation during recording】,以启用自动关

联。

2.假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、

BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、

Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应

的应用系统。

3.或者也可以针对录制的应用系统加入新的关联规则,此即为使用者

自订的关联规则。

4.设定当VuGen检测到符合关联规则的资料时,要如何处理:

?【Issue a pop-up message and let me decide online】:

跳出一个讯息对话视窗,询问您是否要建立关联。

?【Perform correlation in sceipt】:直接自动建立关联

2.录制脚本

开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的资料时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为

BroadVision应用系统建立关联的例子,在脚本注解部分可以看到关联前

的资料。

3.执行脚本验证关联是OK的。

Correlation Studio

当录制的应用系统不属于VuGen预设支援的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。

Correlation Studio会尝试找出录制时与执行时,服务器回应内容的差异部分,藉以找出需要关联的资料,并建立关联。

使用Correlation Studio的步骤如下:

1.录制脚本并执行

2.执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】视

窗,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。

3.扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结

果。

4.检查一下扫瞄的结果后,选择要做关联的资料,然后按下【Correlate】

按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的资料建立关联。

注意:由于Correlation Studio会找出所有有变动的资料,但是并不是所有的资料都需要做关联,所以不建议您直接用【Correlate All】。

5.一般来说,您必须一直重复步骤1~4直到所有需要做关联的资料都找出来

为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。

有可能有些需要做关联的动态资料,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。

关于手动关联请参考 Part2

手动关联

手动关联的执行过程大致如下:

1.使用相近的业务流程与资料,录制二份脚本

2.使用WinDiff工具帮助找出需要关联的资料

3.使用web_reg_save_param函数手动建立关迯

4.将脚本中有用到关联的资料,以新数替代

接下来将详细的说明如何执行每个步骤

使用相近的业务流程与资料,录制二份脚本

1.先录制一份脚本并存档。

2.便照相近的操作步骤与资料录制第二份脚本并存档。注意,所有的步骤和

输入的资料一定都要一样,这样才能找出由服务器端产生的动态资料。

有时候如果的无法使用相近的输入资料,那您也要记得您使用的输入资

料,到时才能判断是您输入的资料,还是变动的资料。

使用WinDiff工具忔助找出需觌关迯的资料

1.在第二份脚本中,点VuGen的Tools】>Compare with Vuser…】,并选

择第一份脚本。

2.接着WinDiff会开启,这时显示二份脚本,并显示有差异的地方。WinDiff

会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(如果你没看到红色字体,请点Options】>View】>Show Inline

Differences】)。

3.逐一检查二份脚本中差异的部份,每一个差异都可能是需要关联的地方。

选择差异的脚本,然后复制。

在复制时,有时并不需要整行脚本,只需要复制脚本中的一部分。

注愿:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延时的。

4.接着就在Recording Log(单一protocol)或是Generation Log(多

protocol)中找这个值。将鼠标点到Recording Log的第一行开头,按下Ctrl+F,开启Find视窗,贴上刚刚复制的脚本,找出在Recording Log 第一次出现的位置。

絿果会有二种:

o在Recording Log中找不到要找的资料,这时请先确你是否打错脚本,毕竟开启了二个几乎一样的脚本,很容易弄错。

o在Recording Log中找到了要找的资料,这时要确定资料是从服务传来的资料。先只要检查资料的标头,从标头的Receiving

response便可知资料是从服务器端传到client端的。如果资料第

一次出现是在Sending request中,则表示此资料是由client端

产生,不需要做关联,但是有可能需要参数化(parameterized)。

您要找的标头格式如下:

*** [tid=b9 Action1 2] Receiving response from host

https://www.doczj.com/doc/e918323773.html,:80 ( 25/11/2002 12:04:00 )

5.现在您已经找到录制二次都不一样,而且是由服务器所产生的动态资料

了,而此资料极有可能需要关联。

使用web_reg_save_param函数手动建立关迯

在找到是由服务器所产生的动态资料之后,接下来就是要找出数据的位置,使用web_reg_save_param函数,将这个动态资料放到函数中。

1.在哪里使用web_reg_save_param函数?

在之前的步骤,我们已经在Execution Log找到可能需要关联的动态资料。

在Execution Log找到动态资料的文字然后复制,我们将会利用这段文字,来帮助我们找出需要关联的动态资料。

在这之前我们需要先找出使用web_reg_save_param函数的正确位置,所

以我们现在再执行一遍脚本,而且这次会开启所有的Log。

1.在VuGen中点Vuser】>Run-Time Settings】。

2.点General】>Log】。

3.勾Enable logging】Always sends messages】Extended log】下

的所有选项。

4.按OK】就可以执行脚本了。

执行完脚本之后,在Execution Log中查找刚刚复制的字符串。找到字符串后,在字符串前会有A.tion1.c(7),这个7就是到时候需要插入

web_reg_save_param函数的使置,也就是需要插入到脚本的第7行。

在脚本的第7行插入一行空白行,然后输入

web_reg_save_param(“UserSes sion?,

“UserSession?这个“UserSession?就是到时需要使用的参数名称,

建议给个有意义的名称。

注意:到这里整个web_reg_save_param函数还没完。

2.找出web_reg_save_param中需要用到的边界字符串

web_reg_save_param函数主要是得到动态资料的左边和右边的固定字符串,来辨识需要记录的动态资料的,所以我们还需找出动态资料的边界字符串。

找出左边界字符串

返回到Execution Log中,找到动态资料的字符串并且复制它。

这时会有个难题,到底需要多少字符串才能以唯一识别要找的动态资料呢?建议是越多越好,但是尽量不要包括到特殊字符串。

在这里我们选择「input type=hidden name=userSession value=字符串。

选择好之后,还要确认这段字符串真的是唯一的,所以我们在Execution Log中按Ctrl+F的查找,找找看这段字符串是不是需要找的唯一的动态资料。如果不是,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出再在第几次的字符串才是需要找的字符串。

将这个边界字符串加到未完成的web_reg_save_param函数中:

web_reg_save_param(“UserSession?, “LB= input type=hidden

name=userSession value=?,

找出右边界字符串

接下来需要找出动态资料的右边界字符串,这个字符串就比较好找了,动态资料的最后一个字符,通常就是我们需要找的右边界字符串了。

以这个例子来看,就是>号,所以需要把右边界字符串加入,

web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后还加上「LAST);就完成整个web_reg_save_param函数了。

web_reg_save_param(“UserSession?, “LB= input type=hidden

name=UserSession value=?, “RB=>?, LAST);

将脚本中有用到关联的资料,以参数替代

当使用web_reg_save_param建立参数后,接下来就是用“UserSession?参数去替代脚本中写死的(hard-coded)资料。

范例:

“Name=userSession?,

“Value=75893.0884568651DQADHfApHDH fcDtccpfAttcf?, ENDITEM,

替换成:

“Name=userSession?, “Value={UserSession}?, ENDITEM,

到这里您已经完房了一个关联了,接下来就是执行脚本,是否能成功执行,还是不能执行通过,就需要检查看看是不是还需要建立另一个关联。

如何在LoadRunner 脚本中建立关联(Correlation): Part3

关于 web_reg_save_param 函数

对于关联(correlation)来说,web_reg_save_param是最关键的一个函数,其功能是在下载的网面内容中,通过设定的边界字符串,找出特定的资料并将其储存在一个参数中,以供后续脚本使用。

接下来将釿尿web_reg_save_param忚比较详细的说明。

Service and registration type function

web_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联时设定proxy提供的信息等,使用时,不会对网页中的其他内容做任何修改。

web_reg_save_param同时也是一个registration type function (即函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了其他关联的动态资料,则必须将web_reg_save_param放在此web_url之后,则

web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,才执行web_reg_save_param找寻其他关联的动态资料并建立参数。

所以必须记住一点,要使用registration type function时,必须把其放在需要得到数据的action function之后。

语法

int web_reg_save_param(const char *ParamName, , LAST);

参数说明

ParamName:存放动态资料的参数名称

list of Attributes:其它属性,包快 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及SaveLen。属性值不分大小写,例如

Search=all。以下将详细说明每个属性值的意义:

?Notfound:指定当找不到需要找的动态资料时该怎么处置。

o Notfound=error:当找不到动态资料时,发出一个错误信息。如果没设定此属性,此为LoadRunner的预设值。

o Notfound=warning:当找不到动态资料时,不发出错误信息,而发出警告,脚本也会继续执行下去不会中断。在脚本出错时,可以使

用此属性值。

?LB:动态资料的左边界字符串。此属性质是必须要有的,而且区分大小写。

?RB:动态资料的右边界字符串。此属性质是必须要有的,而且区分大小写。

?RelFrameID:相对于URL而言,想查找的网页的Frame。此属性质可以是All或是数字,而且可有可无。

?Search:查找的范围。可以是Headers(只查找headers),Body(只查找body 部分,不查找header),Noresource(只查找body部分,不查找header

与resource)或是All(查找全部范围,此为预设值)。此属性质可有可无。

?ORD:指明从第几次出现的左边界开始才是需要记录的资料。此属性质可有可无,预设值是1。如果值为All,则所有找到符合的资料会储存在阵列

中。

?SaveOffset:当找到符合的动态资料时,从第几个字符开始储存到参数中。

此属性质不能为负数,其预设值为0。

?Convert:只能的值有二种:

o HTML_TO_URL: 将HTML-encoded资料转换成URL-encoded资料格式

o HTML_TO_TEXT:将HTML-encoded资料转换成纯文字资料格式?SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此心数可有可无,预设值是-1,表示储存到结束整个字符串。

范例

web_reg_save_param("A", "LB/ic=0) //验证是否找到了页面上的要检查的字符串lr_output_message("we find the string!"); else lr_output_message("sorry,don't find the string!"); 用户名的日志输出: Lr_log_message(“用户名:%s”,lr_eval_string(“{username}”)); 脚本校验——检查点 数据分析: SD 标准偏差值 Transaction 场景 Init 初始化 Scale 比例 Additional 额外的 Granularity 间隔尺寸 Filters 筛选 throughout 吞吐量 Transaction summary 事务摘要

性能测试 递增 1、创建场景 分析: 问:事务相应时间先缓慢上升再平衡再下降说明什么? 答:缓慢上升说明事务响应时间变长说明系统处理能力在下降 再平衡并发用户数已经饱和 再下降并发用户数下降了 如果系统没有此类机制则响应时间不断上升直至宕机 Java 创建对象的时候不释放内存创建太多会导致该问题 问:业务失败情况但是其他的都正常 答:数据库可能被锁住,数据库有互斥性,需要修改数据库 系统要求 1、支持同时多少个并发登录? 2、登录响应时间不超过3秒 3、CPU使用率不应超过80% 4、内存使用率不应超过75% 关键指标分析: Transactions per Second 针对场景运行过程中的每个时间点取样一次,显示在这个时间点上的每个事务的通过、失败、停止的个数 我还在 Analysis 里面找了一下,发现图表的时间显示粒度也是可以设置的。具体方法为:在 图表上点击右键 -> 选择“ Set Granularity ”或者直接按Ctrl+G 。我试着把时间粒度调成以毫秒为单位,结果LoadRunner 提示当前不支持以毫秒为显示粒度,由此我推断LoadRunner 对于 Transactions perSecond 这张图,最小的取样粒度为1 秒

在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。 需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。 1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。 错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。 错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。 解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。 错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do 错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。 如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。 解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。 如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。 最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。

实验二. 使用LoadRunner进行压力测试一.LoadRunner 概要介绍 1.1简介 LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收益的损失。Mercury Interactive 的LoadRunner 能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT 资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner 能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。 1.2基本步骤 使用LoadRunner 完成测试一般分为四个步骤: 1)Vvitrual User Generator 创建脚本 ?创建脚本,选择协议 ?录制脚本 ?编辑脚本 ?检查修改脚本是否有误

2)中央控制器(Controller)来调度虚拟用户 ?创建Scenario,选择脚本 ?设置机器虚拟用户数 ?设置Schedule ?如果模拟多机测试,设置Ip Spoofer 3)运行脚本 ?分析scenario 4)分析测试结果 二.项目背景介绍 2.1 背景概述 “LMS网校考试平台”是一个典型的三层B/S架构的MIS系统(客户端/应用服务器/数据库管),中间层是业务逻辑层,应用服务器处理所有的业务逻辑,但应用服务器本身不提供负载均衡的能力,而是利用开发工具提供的ORB(对象请求代理)软件保证多个应用服务器间的负载均衡。本次测试的目的是:进行应用服务器的压力测试,找出应用服务器能够支持的最大客户端数。方法是:按照正常业务压力估算值的1~10倍进行测试,考察应用服务器的运行情况。 2.2压力测试用例 场景描述一: 1.用户登录的lmm模块,总共登陆24个用户,所有用户都同时并发操作。 2.用户点击“登记的教程” 3.用户点击“启动”,进行课程学习,进入DS模块 4.在DS模块中进行学习,过程包括:首先,点击一次课程结构树;然后,进行课程内容的学习。 5.点击“返回LMS”按钮,返回到lmm模块,点击“退出”按钮,退出系统 场景描述二:

LoadRunner 性能测试脚本 1 概述 Yoyo老师认为脚本录制编写是性能测试的一个重要环节。在性能测试过程中,虚拟用户模拟真实用户使用被测系统, 这个“模拟”的过程正是通过性能测试脚本来实现的。因此,编写一个准确无误的脚本对性能测试有至关重要的意义。完成性能测试脚本包括两个步骤:脚本录制和脚本编写,本文重点关注脚本编写。 2 脚本录制 2.1.录制方式 HTTP协议脚本录制可选两种方式:基于HTML和基于URL。选择哪种录制方式的原则如下:基于浏览器的HTTP应用系统选择HTML,基于其他方式的HTTP应用系统选择URL。 2.2.录制注意点 取消录制期间自动关联功能; 如果部分测试脚本出现问题,需要重新录制,可以只录制存在问题的片断脚本,方法是不选中录制启动对话框中的Record the application startup。 3 脚本编写 3.1.常用技术 LoadRunner性能测试脚本编写常用的技术包括参数化,关联,逻辑控制和脚本模块化。 3.1.1.参数化 参数化就是将脚本中的常量转化为变量的过程。通过录制生成的脚本所有的数据都是常量,为了达到向服务器发送的数据多样化的目的,需要将一些数据常量转化为变量。 3.1.2.关联

关联就是查找动态数据,并把查询到的数据以参数的形式保存起来。在B/S 或者C/S系统中,服务器返回给客户端的数据有些是动态改变的,例如客服系统的人工来话流水号和工作流系统的工单流水号。当打开工单生成页面后,工单流水号已经从服务器端获取到了,而在提交工单步骤,需要将该流水号返回给服务器。因此,在提交工单之前,在脚本中必须获得流水号。获得流水号的方法就是关联。 使用关联功能动态保存的参数跟直接通过参数化生成的参数是一致的。唯一不同的是,通过参数化生成的参数在脚本中可以高亮显示。 3.1.3.逻辑控制 业务系统在实际应用中,业务操作步骤间往往存在逻辑。比如,客服3.0工作流系统,业务代表处理工单,如果待办区没有工单等待处理,则先从工单池中提取工单到待办区,然后进行处理,并且需要优先处理超时或即将超时的工单。在工单处理的性能测试脚本中,也必须遵从这种业务逻辑。 LoadRunner性能测试脚本采用C语言,因此脚本逻辑控制同C语言一致,使用if,switch,while/for/do控制结构。 3.1. 4.脚本模块化 脚本模块化的目的是:提高脚本可读性、可重用性和脚本生产效率。脚本模块化的本质是抽取函数,一些很通用的函数甚至可以封装为DLL。模块化性能测试脚本的思想跟自动化测试的ActionWord有相似之处。 例如:客服3.0系统的登录功能,无论是工作流、知识库、公告便签还是培训考试,它们都使用相同的登录页面。我们可以把登录脚本抽取为一个函数csp_login(char *staffno,char * password),需要登录操作时,不需要录制和拷贝脚本,只要调用这个函数就可以了。 注意:并不是所有的脚本代码块都需要做模块化处理,只有那些稳定不变、并且经常用到的代码块才需要做模块化处理。不做得不偿失的事。 3.2.典型函数 LoadRunner中,常用的函数有很多,这里只介绍编写性能测试脚本过程中那些必然用到的函数。本文重点关注这些典型函数的应用场合及注意点,至于函数详细使用说明请参见LoadRunner帮助文档。 3.2.1.事务相关 3.2.1.1. lr_start_transaction/lr_end_transaction

LoadRunner使用教程 1. 了解LoadRunner 1.1 Loadrunner简介 LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢、系统崩溃等问题。这些都不可避免地导致公司收益的损失。Mercury Interactive 的LoadRunner 能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT 资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner 能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。 1.2 为什么应进行自动性能测试? 自动性能测试是一项规范,它利用有关产品、人员和过程的信息来减少应用程 序、升级程序或修补程序部署中的风险。自动性能测试的核心原理是通过将生产 时的工作量应用于预部署系统来衡量系统性能和最终用户体验。构造严密的性能 测试可回答如下问题: ?应用程序是否能够很快地响应用户的要求? ?应用程序是否能处理预期的用户负载并具有盈余能力? ?应用程序是否能处理业务所需的事务数量?

LoadRunner脚本录制方法 这篇文章性能测试工具LR进行简单介绍,LR的安装和如何录制简单的脚本并对录制好的脚本进行加压等内容,主要目的是让大家对LR有一个基本的了解,同时也掌握录制一个简单脚本的方法。 在学习过程中的问题可以在此帖中发帖询问,心得也可在此帖中跟帖进行交流,共同进步。如果有更好的资料希望可以贴到帖子中,共同分享。 Loadrunner的简介 LoadRunner? 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收益的损失。Mercury Interactive 的 LoadRunner 能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT 资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。 LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner 能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。 1.1 轻松创建虚拟用户 使用LoadRunner 的Virtual User Generator,您能很简便地创立起系统负载。该引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。利用虚拟用户,您可以在Windows ,UNIX或Linux 机器上同时产生成千上万个用户访问。所以LoadRunner 能极大的减少负载测试所需的硬件和人力资源。另外,LoadRunner 的TurboLoad 专利技术能提供很高的适应性。TurboLoad 使您可以产生每天几十万名在线用户和数以百万计的点击数的负载。用Virtual User Generator 建立测试脚本后,您可以对其进行参数化操作,这一操作能让您利用几套不同的实际发生数据来测试您的应用程序,从而反映出本系统的负载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。在这些变量内随意输入可能的订单号和客户名,来匹配多个实际用户的操作行为。LoadRunner 通过它的Data Wizard 来自动实现其测试数据的参数化。Data Wizard 直接连于数据库服务器,从中您可以获取所需的数据(如定单号和用户名)并直接将其输入到测试脚本。这样避免了人工处理数据的需要,Data Wizard 为您节省了大量的时间。为了进一步确定您的Virtual user 能够模拟真实用户,您可利用LoadRunner 控制某些行为特性。例如,只需要

LoadRunner11实例性能测试 1.LoadRunner8.1基础2 1.1术语2 1.2组件与测试流程2 2.生成脚本4 2.1应用程序要求4 2.1录制脚本5 2.2运行脚本7 2.3脚本优化8 2.3.1关联8 2.3.2参数化10 3.运行负载测试12 3.1生成负载12 3.2运行负载测试13 3.3运行视图概述14 4.分析结果16 4.1 Analysis 窗口概述16 4.2分析窗口数据17 4.2.1查看事务平均响应时间18 4.2.2 研究Vuser的行为19 5.一些体会23 1.LoadRunner11基础 1.1术语 ?场景:场景是一种文件,用于根据性能要求定义在每一个测试会话运行期间发生的事件。 ?Vuser:在场景中,LoadRunner 用虚拟用户或Vuser 代替实际用户。Vuser 模拟实际用户的操作来使用应用程序。一个场景可以包含几

十、几百甚至几千个 Vuser。 ?Vuser脚本:Vuser 脚本用于描述 Vuser 在场景中执行的操作。 ?事务:要度量服务器的性能,需要定义事务。事务表示要度量的最终用户业务流程。 1.2组件与测试流程 LoadRunner 包含下列组件: ?虚拟用户生成器:用于捕获最终用户业务流程和创建自动性能测试脚本<也称为虚拟用户脚本)。 ?Controller:用于组织、驱动、管理和监控负载测试。 ?负载生成器:用于通过运行虚拟用户生成负载。 ?Analysis:有助于查看、分析和比较性能结果。 ?Launcher:为访问所有 LoadRunner 组件的统一界面。 负载测试通常由五个阶段组成:计划、脚本创建、场景定义、场景执行和结果分析。 ?计划负载测试:定义性能测试要求,例如并发用户的数量、典型业务流程和所需响应时间。 ?创建 Vuser 脚本:将最终用户活动捕获到自动脚本中。 ?定义场景:使用LoadRunner Controller 设置负载测试环境。 ?运行场景:通过LoadRunner Controller 驱动、管理和监控负载测试。 ?分析结果:使用LoadRunner Analysis 创建图和报告并评估性能。

关于loadrunner的脚本及场景设计 作者:hanshan,发布于2012-9-3,来源:淘测试 LoadRunner的强大也许不用我在此处多费唇舌,用过的同学自是可以深切体会一翻,没用过的同学用用就晓得啦~本文旨在针对一些想对loadrunner 有个初步了解并可以简单上手操作的同学做一个介绍,起到一个抛砖引玉的作用,更深入的使用以后会不定期的整理分享出来。主要介绍脚本及场景两部分内容。 1关于脚本 我们可以使用LoadRunner的Virtual user generator创建虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为,它会先记录业务流程,然后把它转化为脚本。利用虚拟用户,我们可以在业务主机上同时产生成千上万的用户访问。 1.1协议的选择 在录制脚本时选择那种方式呢: 如果应用是WEB应用,首选是HTML-based方式 如果应用是使用HTTP协议的非WEB应用,首选是URL-based方式 如果WEB应用中使用了java applet程序,且applet程序与服务器之间存在通讯,选用URL-based方式 如果WEB应用中使用的javascript、vbscript脚本与服务器之间存在通讯(调用了服务端组件),选用URL-based 方式 基于以上分析,针对我们应用的特点,我们一般选择web(http/html)协议的html-based方式。采用这种方式录制的脚本,方便我们在后期增强脚本时做关联/参数化 1.2测试脚本规范 脚本越小越好。就像写code一样,不要太长,这样易于维护也易懂。尽量做到一个功能写一个脚本。如果那些功能是连续有序的,必须先做上一个,下一个动作才能进行,就只能放在一起了 插入事务。有时我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 可以在脚本中插入不限数量的事务。举个例子:比如购买书籍,把从登录到购买成功整个作为一个脚本,对于需要关注的输入资料到提交保存,定义为单独的事务,以取得响应时间,事务脚本函数如下:

相关主题
文本预览
相关文档 最新文档