LoadRunner性能测试系统学习教程:脚本编写(1)

LoadRunner性能测试系统学习教程:脚本编写(1)
LoadRunner录制结束后会自动生成一段脚本。这段脚本虽然很简单,但很实用,适合初学者学习。可是在真正进行项目性能测试时,只靠LoadRunner自动生成的脚本仍是不够,很难达到业务的要求。所以,在录制脚本结束后,要对脚本进行完善,使其能达到业务模拟的要求,这样尽量地使虚拟用户模拟时更接近用户的实际使用。
html

本章将从如下几个方面介绍完善脚本的技巧:
插入检查点
Block(块)技术
参数化技术
关联技术



web

检查点

在进行压力测试时,常常会有页面间数据传递的操做。若是在测试过程当中传递数据的次数逐渐增多,页面就有可能会发生传递混乱,或者客户端与服务器端数据传输被中断、传输过程当中产生了错误的数据等状况。为了判断数据传递的正确性,更重要的是为了节省人工检查的步骤和时间服务器

LoadRunner提供了在脚本中插入检查点的方法,在每次运行时都检查服务器返回页面的信息是否正确,这样能够大大提升测试效率。app

检查点的原理是经过检查点函数将返回值的结果反映在Controller的状态面板上和Analysis统计结果中。这个原理是基于LoadRunner中不少的API函数的返回值会改变脚本的运行结果。好比,检查点函数web_find,若是它检查到的结果为空,它的返回值就为LR_FAIL,这样整个结果置为FAIL;反之,检查到的结果为成功,则web_find返回值是LR_PASS,整个结果置为PASS。ide

为何须要插入检查点
一般在测试过程当中使用到两种检查点,文本检查点和图片检查点。那么为何须要插入检查点呢?以飞机订票系统的登陆功能为例,咱们来观察在不插入检查点回放,事务结束状态的状况。
函数

首先录制登陆的脚本,脚本以下(部分核心代码):
web_reg_save_param("WCSParam2",
"LB/IC=userSessionvalue=",
"RB/IC=>",
"Ord=1",
"Search=Body",
"RelFrameId=1",
LAST);
web_url("nav.pl",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Snapshot=t7.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_url("mer_login.gif",
"URL=http://127.0.0.1:1080/WebTours/images/mer_login.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t8.inf",
LAST);
lr_start_transaction("Login");
lr_think_time(14);
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
"Mode=HTTP",
ITEMDATA,
"Name=userSession","Value={WCSParam2}",ENDITEM,
"Name=username","Value=test1",ENDITEM,
"Name=password","Value=1",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
"Name=login.x","Value=46",ENDITEM,
"Name=login.y","Value=6",ENDITEM,
LAST);
web_concurrent_start(NULL);
web_url("nav.pl_2",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t10.inf",
"Mode=HTTP",
LAST);
web_url("login.pl_2",
"URL=http://127.0.0.1:1080/WebTours/login.pl?intro=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t11.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
在这个脚本中并无插入检查点,回放脚本,日志文件如图所示。


























































性能

从回放日志中能够看出,登陆事务是正确的,用户成功登陆,这没有问题,如今将web_submit_data函数用户名和密码的参考修改一下,将其修改成以下代码:
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
"Mode=HTTP",
ITEMDATA,
"Name=userSession","Value={WCSParam2}",ENDITEM,
"Name=username","Value=abcdef00133",ENDITEM,
"Name=password","Value=ddaa",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
"Name=login.x","Value=46",ENDITEM,
"Name=login.y","Value=6",ENDITEM,
LAST);
从新回放脚本,回放日志如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
从回放日志中能够清晰的看到,登陆仍是成功的,但实际状况下使用用户名为abcdef00133,密码为ddaa是不可能登陆成功的。从LoadRunner的Run-Time Viewer视图中也能够看出,Run-Time Viewer视图结果如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
登陆成功后正常的状况是,Welcome后面会显示出登陆的用户名。
这个例子说明一个问题,当事务的结束状态为成功时,并不能说明业务真的作成功了,那么同理,当在分析器中看到事务的成功率为100%时,平均事务响应时间也是在指望范围内时,也不能说明系统没有问题,也有可能出现这种状况,业务没有作成功,但事务的结束状态都被置为成功了,这样分析到的结果就彻底错了。




















学习

那么LoadRunner是如何肯定事务结束状态为PASS的呢?其实LoadRunner自己没法实际去判断业务是否作成功,其判断事务是否成功的依据是结束事务函数(lr_end_transaction)是否被执行,若是结束事务函数执行成功,那么LoadRunner则会将事务的结束状态设置为PASS。测试

从这个例子能够看出,若是须要肯定事务是否成功,其实首先应该判断是否登陆成功,只有当登陆成功时,才能肯定登陆事务是成功的,因此其实检查点的根本目的是验证测试过程当中的步骤是否被正确的执行,也能够理解为业务是否被正确的执行,只有这样才能保证后期分析的数据是正确的。url

插入检查点

插入检查点的方法,在工做原理上是在VuGen中插入Text/Image检查点。插入检查点的步骤以下:

1.将视图模式设置为Tree View,如图所示。
VuGen中包含Tree View(树视图)和Script View两种视图模式。通常状况下都是使用Script View,但在插入检查点时,通常都将视图模式切换为Tree View,这样方便找到要插入检查点的页面,对于初学者来讲这是一种很好的方式,这样能够保证插入检查点的位置正确。
LoadRunner性能测试系统学习教程:脚本编写(1)
2.在Tree View中选择要插入检查点的位置。
选中要插入检查点的位置后,点击鼠标右键,选择检查点插入的方式,能够选择插在前面,也能够选择插在后面,如图所示。



3.选择检查点类型和插入函数。
插入检查点有文本检查点(Text Check)和图片检查点(Image Check)两种,选择的检查点函数也有两个,分别为:web_find和web_reg_find。
插入文本检查点(Text Check),使用web_find检查点函数的状况,如图所示,点击OK按钮后会弹出Text Check Properties对话框,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)LoadRunner性能测试系统学习教程:脚本编写(1)


在Specification选项卡,设置检查参数信息,主要有如下三个属性须要设置:
Searchfor:设置要检查的字符串,能够点击对检查的内容进行参数化。

Rightof:设置右边界值,也就是设置要检查字符串右边的内容,如Howareyou,若是要检查的内容为“are”,那么右边界值为“you”,也能够设置为空。
LoadRunner性能测试系统学习教程:脚本编写(1)
Leftof:设置左边界值,也就是设置要检查字符串左边的内容,如Howareyou,若是要检查的内容为“are”,那么左边界值为“How”,也能够设置为空。

而后切换到General选项卡,如图所示,在Step Name文本框中输入该操做的步骤名称,命名时名称最好能反映该操做要搜索的对象。
LoadRunner性能测试系统学习教程:脚本编写(1)
插入文本检查点(Text Check),使用web_reg_find检查点函数的状况,如图所示,点击OK按钮弹出Find Text对话框。
LoadRunner性能测试系统学习教程:脚本编写(1)
在Find Text对话框中设置搜索的属性配置,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
在Find Text对话框设置检查点属性时,有如下几个须要注意的地方:
1.Search for specific Text:和web_find检查点函数同样,一样须要对待检查的字符串进行设置,也能够对检查点的内容进行参数化,但web_reg_find检查点函数还能够对检查的内容进行是否区分大小写、是否为二进制数据、是否使用“#”代替任意阿拉伯数字和是否使用“^”做为通配符进行设置。






2.Search in:设置查找范围,关于查找范围为三个选项:All、Body和Headers,缺省值为Body。
那么如何来肯定查找范围呢?以飞机订票系统登陆成功,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
那么在使用这种方式来插入检查点时,须要检查的用户名(test1)应该是在哪里查找呢?在检查点函数web_reg_find中能够看到,一般有三种范围选择,那么在实际测试过程当中能够依次在这三种范围中进行查找,检查用户名所在的地方就是须要设置的范围。


在树模型中找到登陆成功的页面,并单击HTTP View选项卡,在该选项卡中能够看到录制的过程LoadRunner所抓到客户端向服务器发送的请求和服务器向客户端返回的请求。

在Response Body和Headers选项卡中依次查找待检查的用户名(test1),该实例在Response Body中能够查找到待检查的用户名,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
这样检查范围就应该设置为Body,那么通常在实际测试过程当中待查找的内容都会在Body中,因此缺省值为Body。

3.Save count:定义查找计数器变量名称,该变量会自动统计检查内容出现的次数。在检查点类型和函数中,选择检查点类型为Image Check,检查点函数为web_image_check,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
点击OK按钮,弹出Image Check Properties对话框,在该对话框中设置图片的提示信息和图片的相对路径,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
若是Web窗体中包含有JavaScript脚本,那么在TreeView中显示可能会有问题,这时要在GeneralOptions中进行设置,如图所示。
LoadRunner性能测试系统学习教程:脚本编写(1)
进入General Options对话框,如图所示,切换到Correlation选项卡,选中Enable Scripting and Java applets on Snapshots viewer复选框,点击OK按钮,设置完毕。
LoadRunner性能测试系统学习教程:脚本编写(1)4.参数化:检查点也能够进行参数化,由于检查点的内容可有会出现常常变化的状况,所以在必定的时候须要对检查点的内容进行参数化操做。在检查点属性设置对话框中点击按钮,弹出参数设置对话框,如图所示。

相关文章
相关标签/搜索