百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

cac55 2024-09-26 07:27 18 浏览 0 评论

引言

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


本章将从以下几个方面介绍完善脚本的技巧

插入检查点

Block(块)技术

参数化技术

关联技术


检查点

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


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


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


为什么需要插入检查点

通常在测试过程中使用到两种检查点,文本检查点和图片检查点。那么为什么需要插入检查点呢?以飞机订票系统的登录功能为例,我们来观察在不插入检查点回放,事务结束状态的情况。


首先录制登录的脚本,脚本如下(部分核心代码):

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);

重新回放脚本,回放日志如图所示。

从回放日志中可以清晰的看到,登录还是成功的,但实际情况下使用用户名为abcdef00133,密码为ddaa是不可能登录成功的。从LoadRunner的Run-Time Viewer视图中也可以看出,Run-Time Viewer视图结果如图所示。

登录成功后正常的情况是,Welcome后面会显示出登录的用户名。

这个例子说明一个问题,当事务的结束状态为成功时,并不能说明业务真的做成功了,那么同理,当在分析器中看到事务的成功率为100%时,平均事务响应时间也是在期望范围内时,也不能说明系统没有问题,也有可能出现这种情况,业务没有做成功,但事务的结束状态都被置为成功了,这样分析到的结果就完全错了。


那么LoadRunner是如何确定事务结束状态为PASS的呢?其实LoadRunner本身无法实际去判断业务是否做成功,其判断事务是否成功的依据是结束事务函数(lr_end_transaction)是否被执行,如果结束事务函数执行成功,那么LoadRunner则会将事务的结束状态设置为PASS。


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

插入检查点

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


1.将视图模式设置为Tree View,如图所示。

VuGen中包含Tree View(树视图)和Script View两种视图模式。一般情况下都是使用Script View,但在插入检查点时,一般都将视图模式切换为Tree View,这样方便找到要插入检查点的页面,对于初学者来说这是一种很好的方式,这样可以保证插入检查点的位置正确。

2.在Tree View中选择要插入检查点的位置。

选中要插入检查点的位置后,点击鼠标右键,选择检查点插入的方式,可以选择插在前面,也可以选择插在后面,如图所示。


3.选择检查点类型和插入函数。

插入检查点有文本检查点(Text Check)和图片检查点(Image Check)两种,选择的检查点函数也有两个,分别为:web_find和web_reg_find。

插入文本检查点(Text Check),使用web_find检查点函数的情况,如图所示,点击OK按钮后会弹出Text Check Properties对话框,如图所示。

在Specification选项卡,设置检查参数信息,主要有以下三个属性需要设置:

Searchfor:设置要检查的字符串,可以点击对检查的内容进行参数化。


Rightof:设置右边界值,也就是设置要检查字符串右边的内容,如Howareyou,如果要检查的内容为“are”,那么右边界值为“you”,也可以设置为空。

Leftof:设置左边界值,也就是设置要检查字符串左边的内容,如Howareyou,如果要检查的内容为“are”,那么左边界值为“How”,也可以设置为空。

然后切换到General选项卡,如图所示,在Step Name文本框中输入该操作的步骤名称,命名时名称最好能反映该操作要搜索的对象。

插入文本检查点(Text Check),使用web_reg_find检查点函数的情况,如图所示,点击OK按钮弹出Find Text对话框。

在Find Text对话框中设置搜索的属性配置,如图所示。

在Find Text对话框设置检查点属性时,有以下几个需要注意的地方:

1.Search for specific Text:和web_find检查点函数一样,同样需要对待检查的字符串进行设置,也可以对检查点的内容进行参数化,但web_reg_find检查点函数还可以对检查的内容进行是否区分大小写、是否为二进制数据、是否使用“#”代替任意阿拉伯数字和是否使用“^”作为通配符进行设置。


2.Search in:设置查找范围,关于查找范围为三个选项:All、Body和Headers,缺省值为Body。

那么如何来确定查找范围呢?以飞机订票系统登录成功,如图所示。

那么在使用这种方式来插入检查点时,需要检查的用户名(test1)应该是在哪里查找呢?在检查点函数web_reg_find中可以看到,通常有三种范围选择,那么在实际测试过程中可以依次在这三种范围中进行查找,检查用户名所在的地方就是需要设置的范围。


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


在Response Body和Headers选项卡中依次查找待检查的用户名(test1),该实例在Response Body中可以查找到待检查的用户名,如图所示。

这样检查范围就应该设置为Body,那么一般在实际测试过程中待查找的内容都会在Body中,所以缺省值为Body。


3.Save count:定义查找计数器变量名称,该变量会自动统计检查内容出现的次数。在检查点类型和函数中,选择检查点类型为Image Check,检查点函数为web_image_check,如图所示。

点击OK按钮,弹出Image Check Properties对话框,在该对话框中设置图片的提示信息和图片的相对路径,如图所示。

如果Web窗体中包含有JavaScript脚本,那么在TreeView中显示可能会有问题,这时要在GeneralOptions中进行设置,如图所示。

进入General Options对话框,如图所示,切换到Correlation选项卡,选中Enable Scripting and Java applets on Snapshots viewer复选框,点击OK按钮,设置完毕。

4.参数化:检查点也可以进行参数化,因为检查点的内容可能会出现经常变化的情况,因此在一定的时候需要对检查点的内容进行参数化操作。在检查点属性设置对话框中点击按钮,弹出参数设置对话框,如图所示。

相关推荐

博科矩阵新IP网络推动发展OTT服务

近日消息,日本电信服务提供商软银集团正在部署博科VDX交换机,为集团公司通用服务基础架构网络提供以太网矩阵,从而简化数据中心运营。这个新的基础架构将大幅度降低软银数据中心网络运营的复杂度和成本,使该公...

博科SDN战略落地 首款控制器Vyatta面世

ZDNET网络频道10月10日评论消息(文/于泽):虽然软件定义网络(SDN)近两年被炒得很热,但一直属于雷声大雨点小。各网络厂商都声称自家的交换机能够支持OpenFlow协议、实现SDN,不过就...

博科网络矩阵助Skilled Group“时刻在线”

澳大利亚最大的劳动力解决方案提供商SkilledGroup采用博科以太网和光纤通道存储区域网络(SAN)矩阵部署了一个创新的网络,从而打造了一个“时刻在线”的IT基础架构。博科矩阵实现了零停机环境以...

博科基于OpenDaylight推出SDN控制器Vyatta

ZDNET网络频道09月23日编译:博科周一宣布推出Vyatta控制器。Vyatta是博科SDN产品系列中一个新的主打产品。博科表示,Vyatta控制器是一步一步的从OpenDaylight项目中...

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件报错的解决办法。。------------------------------------------------------------...

博科携手VMware推动软件定义数据中心和网络虚拟化的普及

2014年10月14日--博科(NASDAQ:BRCD)今天宣布,公司携手VMware,推出支持新IP的解决方案,以期让企业能够更轻松地迁移到软件定义数据中心(SDDC)和使用网络虚拟化。博科公司...

博科公司为追求速度极致的闪存拥趸提供光纤通道交换机

博科公司已经发布了一款每秒32Gbit第六代光纤通道交换机,这意味着其能够将现有每秒16Gbit连接速度提升一倍。其G620交换机采用1U机箱,提供24到64个端口,据博科方面所言这已经达到当前业...

博科推出第6代交换机 扩大光纤存储地位

博科今天宣布推出业内第一台第6代光纤通道存储网络交换机——博科G620,进一步扩大了博科在光纤通道技术领域的地位。这一全新专用且高密度SAN交换机提供突破性的性能和高可扩展性,旨在支持来自核心应用的数...

微信官宣新功能上线,聊天记录备份、迁移更好用了!

说到手机里哪个App最占空间,很多用户的答案大概都是微信,动辄占用几十甚至上百GB。不仅App本身体积庞大,更主要的是日积月累的聊天记录导致了空间的迅速消耗。此前,释放微信空间的常用方法是将...

局域网沟通工具--BeeBEEP(局域网内部聊天工具)

原文链接:局域网沟通工具--BeeBEEPHello,大家好啊!今天给大家带来一篇关于在信创终端上使用BeeBEEP的文章。BeeBEEP是一款安全、便捷的局域网即时通讯工具,支持文字聊天、文...

企业 IM 即时通讯底座,支持局域网通讯

在数字化浪潮下,企业对即时通讯的需求日益增长,尤其是对通讯安全性、可控性的要求愈发严苛。BeeWorks作为专业的企业IM即时通讯底座,凭借对局域网通讯的支持,为企业打造了优质可控的即时通讯与实...

IM即时通讯软件,构建企业局域网内安全协作

安全与权限:协同办公的企业级保障在协同办公场景中,BeeWorks将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理,企业网盘支持水印预览、离线文档权限回收等功能,防止敏感资料外泄;多人...

当今信息化时代都离不开WLAN, 今天给大家普及一下WLAN知识

无线局域网(WirelessLocalAreaNetworks/WLAN)一.无线让网络使用更自由:1.凡是自由空间均可连接网络,不受限于线缆和端口位置。二.无线让网络建设更经济:1.终端...

软网推荐:寻找WebQQ替代者 在线可以继续聊

不少公司禁止上班聊天,常常采取封禁QQ、关闭端口等方法,导致很多聊天软件无法使用。以前我们可以通过WebQQ绕开限制,不过WebQQ在2019年1月1日开始停止服务,想要继续隐蔽聊天,就只能找其他一些...

搭建自己的聊天室平台、公司内部聊天平台,Rocket.Chat搭建使用

一,简介rocket.chat是一个开源的社交软件,即可以直接在web页面使用,也可以下载APP(Android,IOS,Windows,MacOS)主要功能:群组聊天,直接通信,私聊群,桌面通知...

取消回复欢迎 发表评论: