本节书摘来自异步社区《LoadRunner 12七天速成宝典》一书中的第2章,第2.4节让代码动起来,作者陈霁,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 让代码动起来
恋恋:师傅,师傅,接着我们应该干嘛了?
云云:嗯,在搞定编码之后我可以给你说怎样让脚本动起来了。
恋恋:动起来?
云云:就是变量化操作或者直接叫做参数化吧。
恋恋:似曾相识。
云云:这样说吧,你先录制一个用户注册后发帖的脚本,然后回放一下,看看结果。
恋恋开始录制注册脚本,录制的结果如下
Action()
{
web_url("discuz",
"URL=http://127.0.0.1/discuz/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/common/background.png", "Referer=http://127.0.0.1/discuz/forum.
php", ENDITEM,
"Url=static/image/common/px.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/qmenu.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/nv.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/search.gif", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/nv_a.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/chart.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/titlebg.png", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/loading.gif", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/cls.gif", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
"Url=static/image/common/right.gif", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM,
LAST);
lr_think_time(6);
web_url("forum.php",
"URL=http://127.0.0.1/discuz/forum.php?mod=ajax&infloat=register&handlekey= register&
action=checkusername&username=yunyun&inajax=1&ajaxtarget=returnmessage4",
"TargetFrame=",
"Resource=0",
"RecContentType=text/xml",
"Referer=http://127.0.0.1/discuz/",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
web_add_cookie("38We_2132_lastact=1462199686%09forum.php%09ajax; DOMAIN=127.0.0.1");
lr_think_time(16);
web_submit_data("member.php",
"Action=http://127.0.0.1/discuz/member.php?mod=register&inajax=1",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/xml",
"Referer=http://127.0.0.1/discuz/forum.php",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=regsubmit", "Value=yes", ENDITEM,
"Name=formhash", "Value=f6868869", ENDITEM,
"Name=referer", "Value=http://127.0.0.1/discuz/", ENDITEM,
"Name=handlekey", "Value=register", ENDITEM,
"Name=activationauth", "Value=", ENDITEM,
"Name=username", "Value=yunyun", ENDITEM,
"Name=password", "Value=yunyun874", ENDITEM,
"Name=password2", "Value=yunyun874", ENDITEM,
"Name=email", "Value=yunyun@cloudits.info", ENDITEM,
LAST);
web_add_cookie("38We_2132_lastact=1462199704%09forum.php%09ajax; DOMAIN=127.0.0.1");
web_add_cookie("38We_2132_auth=d0a6122NfJm8bnCZNb4bdu3N4LFcMpRdf1ekSFRKzIBCWyb4rJ8q9
pRms%2BCaL3gaWr7TMc7xFuKyeTfudQLe; DOMAIN=127.0.0.1");
web_url("forum.php_2",
"URL=http://127.0.0.1/discuz/forum.php?mod=ajax&infloat=register&handlekey= register&
action=checkemail&email=yunyun@cloudits.info&inajax=1&ajaxtarget=returnmessage4",
"TargetFrame=",
"Resource=0",
"RecContentType=text/xml",
"Referer=http://127.0.0.1/discuz/",
"Snapshot=t4.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/common/check_error.gif", ENDITEM,
LAST);
web_add_cookie("38We_2132_sid=ss8Vys; DOMAIN=127.0.0.1");
web_add_cookie("38We_2132_lastact=1462199708%09home.php%09spacecp; DOMAIN=127.0.0. 1");
web_add_cookie("38We_2132_checkpm=1; DOMAIN=127.0.0.1");
web_url("discuz_2",
"URL=http://127.0.0.1/discuz/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1/discuz/forum.php",
"Snapshot=t5.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/common/popupcredit_bg.gif", "Referer=http://127.0.0.1/discuz/
forum.php", ENDITEM,
"Url=static/image/common/user_online.gif", "Referer=http://127.0.0.1/discuz/forum.
php", ENDITEM,
"Url=static/image/common/arrwd.gif", "Referer=http://127.0.0.1/discuz/forum.php",
ENDITEM, LAST);
web_add_cookie("38We_2132_lastact=1462199714%09forum.php%09forumdisplay; DOMAIN=127.
0.0.1");
lr_think_time(4);
web_url("ĬÈÏ°æ¿é",
"URL=http://127.0.0.1/discuz/forum.php?mod=forumdisplay&fid=2",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1/discuz/forum.php",
"Snapshot=t6.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/smiley/default/shocked.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/cry.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/huffy.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/biggrin.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/smile.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/sad.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/tongue.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/sweat.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/shy.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/titter.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/mad.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/fav.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/pt_item.png", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/new_pm.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/feed.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/arw_l.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/pt_icn.png", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/arw_r.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/editor/editor.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/atarget.png", "Referer=http://127.0.0.1/discuz/forum.php?
mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/loveliness.gif", "Referer=http://127.0.0.1/
discuz/forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/lol.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/funk.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/curse.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/sleepy.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/dizzy.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/hug.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/victory.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/time.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/shutup.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/kiss.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/handshake.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/smiley/default/call.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=forumdisplay&fid=2", ENDITEM,
"Url=static/image/common/pollsmall.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=forumdisplay&fid=2", ENDITEM, LAST);
web_add_cookie("38We_2132_lastact=1462199718%09forum.php%09post; DOMAIN=127.0.0.1");
web_url("¸ß¼¶Ä£Ê½",
"URL=http://127.0.0.1/discuz/forum.php?mod=post&action=newthread&fid=2",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1/discuz/forum.php?mod=forumdisplay&fid=2",
"Snapshot=t7.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/common/card_btn.png", "Referer=http://127.0.0.1/discuz/forum.
php?mod=post&action=newthread&fid=2", ENDITEM,
"Url=static/image/common/notice.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=post&action=newthread&fid=2", ENDITEM,
"Url=static/image/common/upload.swf?site=/discuz/misc.php%3fmod=swfupload% 26type=
image%26fid=2&type=image&random=yECy", "Referer=http://127.0.0.1/discuz/forum.php?
mod=post&action=newthread&fid=2", ENDITEM,
"Url=static/image/common/upload.swf?site=/discuz/misc.php%3fmod=swfupload%26fid=2
&random=On75", "Referer=http://127.0.0.1/discuz/forum.php?mod=post&action=newthread&
fid=2", ENDITEM, LAST);
web_add_cookie("38We_2132_lastact=1462199790%09forum.php%09post; DOMAIN=127.0.0.1");
web_add_cookie("38We_2132_lastact=1462199790%09forum.php%09viewthread; DOMAIN=127.0. 0.1");
web_add_cookie("38We_2132_oldtopics=D867D866D; DOMAIN=127.0.0.1");
web_add_cookie("38We_2132_fid2=1462199790; DOMAIN=127.0.0.1");
web_submit_data("forum.php_3",
"Action=http://127.0.0.1/discuz/forum.php?mod=post&action=newthread&fid=2&extra=
&topicsubmit=yes",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1/discuz/forum.php?mod=post&action=newthread&fid=2",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=formhash", "Value=a1735ba2", ENDITEM,
"Name=posttime", "Value=1462199718", ENDITEM,
"Name=wysiwyg", "Value=1", ENDITEM,
"Name=subject", "Value=´ô´ôÑòÑòÀ´·¢Ìû", ENDITEM,
"Name=message", "Value=ÃÀÃÀ¹·¹·ÁïÁïÑò", ENDITEM,
"Name=save", "Value=", ENDITEM,
"Name=uploadalbum", "Value=", ENDITEM,
"Name=newalbum", "Value=", ENDITEM,
"Name=usesig", "Value=1", ENDITEM,
"Name=allownoticeauthor", "Value=1", ENDITEM,
EXTRARES,
"Url=data/cache/style_1_forum_viewthread.css?z69", "Referer=http://127.0.0.1/
discuz/forum.php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/js/forum_viewthread.js?z69", "Referer=http://127.0.0.1/discuz/forum.
php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=uc_server/images/noavatar_middle.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=viewthread&tid=867&extra=", ENDITEM, LAST);
web_add_cookie("38We_2132_lastact=1462199791%09home.php%09spacecp; DOMAIN=127.0. 0.1");
web_custom_request("home.php",
"URL=http://127.0.0.1/discuz/home.php?mod=spacecp&ac=pm&op=checknewpm&rand=
1462199790",
"Method=GET",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1/discuz/forum.php?mod=viewthread&tid=867&extra=",
"Snapshot=t9.inf",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
EXTRARES,
"Url=static/image/common/flbg.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/rec_subtract.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/oshr.png", "Referer=http://127.0.0.1/discuz/forum.php?
mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/midavt_shadow.gif", "Referer=http://127.0.0.1/discuz/
forum.php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/fastreply.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/rec_add.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/repquote.gif", "Referer=http://127.0.0.1/discuz/forum.
php?mod=viewthread&tid=867&extra=", ENDITEM,
"Url=static/image/common/edit.gif", "Referer=http://127.0.0.1/discuz/forum.php?
mod=viewthread&tid=867&extra=", ENDITEM, LAST);
return 0;
}
云云:录制出来的东西现在能看懂吗?
恋恋:差不多吧,基本上都能看懂,就是不太明白中间这个请求,forum.php这个页面调用了是在干嘛的。
云云:不错哦,其实这个东西是一个Ajax,以后再给你说吧,你现在可以无视它的存在。接着你回放一下这个脚本,再看看结果。
恋恋(按下F5键):运行一切顺利,而且我还去看了Test Result里面显示的也是PASSED。
云云:你确定认真看结果了么?
恋恋:让我再看看。注册过一次的账户应该再次注册不成功吧,Test Result里面的截图也告诉我该用户名已经注册,为什么LoadRunner没有报错呢,明明就没做成功啊。
云云:LoadRunner怎么知道错与对呢?对于工具来说,它判断正确与否的唯一方法就是HTTP状态,就是那个200或者是404之类的东西。
恋恋:貌似你好像说过。
云云:我有说过么?
恋恋:这两天你没说过,但是平常你经常说,还经常吐槽网友的内容,就说他们连HTTP状态都不知道!
云云:好吧,这个东西确实蛮基础的,本质上可以这样解释,你问我3+2等于几,我回答4,你有两层判断:
(1)我回答地很快
(2)我回答的结果和你想要的结果是相同的。
恋恋:不明白!
云云:不就是你说过的么,做不做是态度问题,做不做的好是能力问题。所以服务器返回的状态是态度问题,只能看态度。而二级检查就是看能力。LoadRunner能够判断到一级的态度是正确的,但不能判断结果的内容是否正确。
恋恋:大概有点概念了,反应首先要快,认错要快但是屡教不改,是不是啊。
云云:额,大概就是这个意思。其实LoadRunner也会检查,要写个检查点函数就行了,现在还没讲到。
恋恋:那么现在脚本跑了,不成功怎么办呢。
云云:简单说就是要让数据动起来,就是参数化。
恋恋:那怎么参数化呢?
云云:我们先不讲复杂的变量和参数的互换,我们就从最简单的讲起。
恋恋:嗯,好的。
云云:打开刚才录制的注册脚本,找到用户名和邮箱。
恋恋:为什么要找这个啊?
云云:因为你提交的这两个东西系统会认为已注册了,就不会再给你注册成功的提醒。
恋恋:哦,原来如此,是这些代码吧,如图2-11所示。
云云:对的,就是这块,你能看到你提交的username和email是两个表单属性,你提交到服务器的值(通过POST方式)是yunyun和yunyun874。接着你选择其中username对应的yunyun数据并单击鼠标右键,在这里访问“Replace with a Parameter”下的“Create New Parameter”,如图2-12所示。
接着使用默认的NewParam参数名和参数类型,单击“OK”确定,如图2-13所示。
这里LoadRunner会提示是否需要替换所有的配对数据,在不太清楚整个脚本数据情况下,建议选择“NO”不要替换,如图2-14所示。
恋恋:嗯,我来操作一下。代码发生了变化,刚才选中的东西被替换成了{NewParam},还有个淡蓝色的方块,如图2-15所示。
云云:对,这就是参数化后的效果。通过这种模式做出来的参数会有个框,不过记住不是所有的参数都是有框的,在Web协议中参数都是用{}包围的。
恋恋:哦,然后呢?
云云:接着你把这个参数复制一次到电子邮件的字段上替换掉@前的内容。
恋恋:这样就是让username和email都用同一个参数动态对吧?
云云:聪明!
恋恋:那么代码变成这个样子了,如图2-16所示。
云云:接着我们要让他们动起来。按快捷键Ctrl+L或菜单“Design”下的“Parameters”,找到“Parameters List”功能,如图2-17所示。
可以看到我们前面替换的值就在中间,只要修改它,那么代码运行时候的值就会跟着变。
恋恋:这是一个变量吧。
云云:对,这就是个高级变量。接着你可以修改一下这个内容,然后再运行一次看看是不是就通过了。
恋恋:(几分钟后)嗯,这次真的用户注册成功了。
云云:这里给你个小技巧,有时候你不知道参数化的数据对不对,那么有两个办法可以让你知道:
(1)在运行测试中打开参数日志,运行完成通过日志检查。
(2)在运行时通过断点和运行数据完成检查。
恋恋:具体点,这和没说一样!
云云:简单介绍一下:
(1)在运行日志中启动这些选项后,运行代码就会标记为蓝色日志,如图2-18所示。
(2)使用F9键在代码中设置断点,否则太快了你可能来不及看,断点的代码会用红色标记出来,然后单击运行代码,如图2-19所示。
在代码运行时底部会多一个Rumtime Data的标签,里面就能看到参数值,如图2-20所示。
两种方式明白了吗?
恋恋:真复杂!
云云:了解代码如何运行是调试的最基本技能,这个很重要的。
恋恋:知道啦。
云云:最后问你一个高级点的问题,我现在要注册很多很多用户怎么办?
恋恋:如果写几十个用户名,估计手写一下问题不大,但是要是写几十万肯定就困难了,难道写代码?
云云:这里有两个办法,一个是用Excel,另一个是写代码。
恋恋:那你快详细介绍一下。
云云:好的。
云云:首先来说一下Excel的方法,Excel中的魔术拖曳一般大家都会,就是写几个记录,然后通过记录右下角拖拉的方式可以生成一堆顺序数据,如图2-21所示。
接着拖动出你要的数据数量,另存为csv格式,就是逗号分隔符格式(这个格式LR的参数化是支持的),最后要做的事情就是把参数化指向切到这个文件上就行了,为了避免一些误解,建议把这个文件后缀改成.dat文件,并且放在脚本目录下,如图2-22所示。
单击“Browse”选择刚才另存出来的文件就行了。
恋恋:这么简单啊,我记得UE貌似还有列编辑功能,是不是还能整体调整?
云云:列编辑都知道啊,确实是这样的。
**小结
掌握基本的ParameterList参数管理及基本使用原理。**