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

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

cac55 2024-09-26 07:27 20 浏览 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.参数化:检查点也可以进行参数化,因为检查点的内容可能会出现经常变化的情况,因此在一定的时候需要对检查点的内容进行参数化操作。在检查点属性设置对话框中点击按钮,弹出参数设置对话框,如图所示。

相关推荐

服务器用的CPU和个人电脑用的CPU有什么区别?一篇文章告诉你!

服务器cpu和普通cpu的区别你的电脑CPU是‘短跑健将’,服务器CPU却是‘铁人三项选手’——它不追求瞬间爆发力,而要7×24小时扛住千军万马的数据洪流!想知道为什么企业机房敢收天价服务费?答案全藏...

“吃鸡”新版本第1天,玩家进入游戏点击“立即更新”,后悔了!

欢迎诸位小伙伴们来到天哥开讲的《和平精英》“精英小课堂”~每逢两三个月,这款游戏就会迎来一次大版本迭代更新,很多朋友会在第一时间更新版本,前往全新的主题模式里一探究竟。不过也有一些老玩家并不会立刻更新...

中关村在线·aigo存储杯《无畏契约》全国高校争霸赛招募启事

以青春之名,燃电竞之火1赛事背景与宗旨在金秋送爽的9月,芊芊学子们即将回归校园生活。为了给精彩的校园生活锦上添花,由中关村在线与aigo存储联合主办的《无畏契约》全国高校争霸赛正式启幕,旨在为全国高...

【生肖狗】9.7-9.10提醒:人算不如天算,转变即是转机

九月上旬的风,带着秋意的清爽,也带着几分不可捉摸的变数。对于生肖狗的朋友们来说,9月7日到9月10日这四天,格外需要留意“计划与变化”的碰撞——你们向来习惯提前规划,做事稳妥周全...

转转客服IM系统的WebSocket集群架构设计和部署方案

本文由转转技术李帅分享,原题“转转客服IM的WebSocket集群部署方案”,下文有修订和重新排版。1、引言转转作为国内头部的二手闲置交易平台,拥有上亿的用户。用户在使用转转app遇到问题时,一般可以...

上线3天Steam好评率86%,《时间旅者:重生曙光》开启生存恐怖新篇章

这里究竟发生了什么?末日降临,真正的故事悄然启幕。目前,生存恐怖类游戏《时间旅者:重生曙光(Cronos:TheNewDawn)》已在PC(Steam、EpicGamesStore)、P...

什么神仙洗衣机让我一天有28小时?拆开松下「大四洗」藏了啥秘密

说起家庭洗衣的烦恼,想必很多人都有过类似的经历:贴身内衣要单独洗,宝宝的口水巾得小心呵护,宠物玩具怕藏污纳垢,床单被套又体积庞大,把这些东西混在一起洗担心越洗越脏,分开洗又得反复操作,洗完烘、烘完再洗...

爆料人挖出GTA6注册的奇葩域名 延续经典讽刺风格

等待《侠盗猎车手6》的日子跨越了数个春秋,在游戏圈期盼着这部可能成为史上最重磅游戏的过程中,每过一段时间就会有些许消息浮出水面。最新线索来自数据挖掘者Tez2在GTA论坛的发现,他可能偶然发现了关于...

跟着故事去旅行——读《驼峰间:旅行、探险与征服》

作者:郭冰茹《驼峰间》记录了旅行家伊本·白图泰有生之年流传的一则寓言,说一对父子被关进了监狱,有一天儿子问父亲他们每天吃的都是些什么肉,父亲说有牛、羊和骆驼,并且详细地描述了每种动物的特点。但不管父亲...

前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令

在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...

跳票6年后,「丝之歌」首发把Steam服务器干爆了 | 玩点好的

文丨果脯樱花隧道昨天晚上22点,「鸽」了6年的《空洞骑士:丝之歌》终于上线,算是了却不少玩家的执念。毕竟,这款游戏实在让人等了太多太多年,而且曾有过多次定档后跳票的「案底」,不知道把多少人都整出了P...

对标魔兽失败!腾讯版“魔兽”运营一年多后,宣布国际服凉凉

大家好,这里是正惊游戏,我是正惊小弟。有很多游戏都想干掉《魔兽世界》,但是大部分魔兽杀手都知道自己不是魔兽的对手,不过是想蹭一下人气而已。腾讯也有一款曾经想对标魔兽的大作,可是上线才一年半国际服就宣布...

408 Request Timeout:服务器等待客户端发送请求的时间过长。

408RequestTimeout是HTTP状态码之一,表示客户端在发送请求时,服务器等待的时间过长,最终放弃了处理该请求。此问题通常与网络延迟、客户端配置、服务器设置或者应用程序的性能有关...

梦幻西游:9.9维护解读,全新时间服锁定129级

梦幻西游:9.9维护解读,全新时间服锁定129级9月9日维护解读。1、教师节活动开启,一共7天。挂机,答题,收笔墨纸砚,收海马,搞起来。或者是提前收点家具,教师节期间体力珍贵,家具会涨价。又或者是教师...

只是拆掉一面墙,空间就立马大变样,这种设计思路,值得学习

你有没有过这样的经历?刚买的房子户型图看起来方方正正,装修完却发现——玄关鞋柜只能塞在角落,进门就撞墙;餐厅正好在过道中间,吃饭像走流程;明明有四个房间,却有一个空着没用,像块食之无味的鸡肋;客餐厅之...

取消回复欢迎 发表评论: