LoadRunner脚本编写之一
性能测试工程师要懂代码么?答案是必须的。好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了。还有非计算机专业出身的测试员,所以对代码望都比较望而生畏。
好多人认为loadrunner只支持C语言(包括我之前也一直这么认为),因为loadrunner默认的脚本是C语言的,其实它支持目前所有主流的 语言,如:Java User、VB User、VB script. User 、Javascript. User、Mmicrosoft .NET等,总有一款适合你的吧,最起码C语言是必修课吧。
对于编写loadrunner脚本的态度
现在有一辆自行车放在你的面前,你为显示自己体力很好,每天走路去上班。我骑车只要半小时,而你走路却要2小时,我们的目的是一样的,你是为了让人说你 牛呢,还是让人说你傻呢?当然自行车不是万能的,比如,上班的地点在山上,自行车跟本上不去,自然走路就是唯一的选择了。
所以,对于loadrunner脚本,能录制的部分就录制改,不能录制的就手写,但前提是我们要会写脚本。
认识loadrunner脚本
Loadrunner自带了一个小飞机订票系统
我们先启动 StartWebserver服务,如果启动成功,桌面右下角会有一个绿色的X ,然后打开浏览器访问http://127.0.0.1:1080/WebTours/
下面是我们loadrunner录制一个登录过程。
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_rendezvous("集合点");
lr_start_transaction("登陆时间");
web_submit_form("login.pl",
"Snapshot=t2.inf",
ITEMDATA,
"Name=username", "Value=test1", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=login.x", "Value=59", ENDITEM,
"Name=login.y", "Value=5", ENDITEM,
LAST);
lr_end_sub_transaction("登陆时间",LR_ABORT);
return 0;
}
上面的代码中有大括号“{}”,返回函数“ return ”,如果你有编程基础的不会说对于上面的代码一点都看不懂。只是上面的脚本没有使用我们平时用到的东西,如定义常量、变量,分支(if....else if....)、循环语句(for...)
下面我们动手写个小程序,一个乘法运算,求员工工资的总合。
|
#define COUNT 100 Action() return 0 ; |
#define COUNT 100
#define SALARY 4000 定义一个全局常量。
lr_output_message 输出语句,这个和我们所学的C 语言不一样,在C中我们会用println 来输入结果。
运行结果:
| .......... Starting iteration 1. Starting action Action. Action.c(9): 100人合计薪资支出为:400000 ----这里将运行结果打印输出 Ending action Action. Ending iteration 1. .......... |
一个有意思的小程序
当然了,上面的程序太鸡肋了,我只是想表达,loadrunner 也可以运行我们上学时学的那些普通的小程序。他们是一样一样的。
下面看个比较有意思的小程序,通过随即数和分支(选择)语句switch来完成
|
Action() switch (randomnumber) { web_url("www.baidu.com", return 0; } case 2: web_url("www.google.com.hk", return 0; } web_url("www.youdao.com", return 0; |
上面的程序,我分别录制了百度、谷歌、有道访问三个网的首页的代码,我想在运行脚本时,随机的去访问其中一个网站,如何做呢?我们通过随机函数,随机出1~3之间的整数,根据随机来的结果,然后执行switch语句中的代码。
下面来看我的结果
为了查看脚本结果更清晰,我在每一段脚本前面加了一个集合点“lr_rendezvous”函数。
| Starting iteration 1. Starting action Action. Action.c(57): Rendezvous 访问有道集合点 Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/pic.gif" (specified by argument number 9) [MsgId: MMSG-26577] Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/logo.png?1" (specified by argument number 11) [MsgId: MMSG-26577] Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/nv_line.gif" (specified by argument number 13) [MsgId: MMSG-26577] Action.c(59): Downloading resource "http://shared.ydstatic.com/r/2.0/p/pic.gif" (specified by argument number 15) [MsgId: MMSG-26577] Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/yd.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659] Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/nav.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659] Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/suggest.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659] Action.c(59): web_url("www.youdao.com") was successful, 30006 body bytes, 3347 header bytes, 39 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action. Ending iteration 1. |
通过脚本读取文件
为了增加语言的强大,高级语言不可以把一个程序的实现从头到尾写到文件里,这样可读性和维护很差,也无法实现团队发,肯定会相互调用接口函数库等。当然,读取文件也是常用的操作,下面我们来看一个读取文件的例子。
我们事先准备一个文件test.txt ,里面随便你输入些什么内容吧!
|
Action() int count,total=0; //判断是否可以读取文件 return -1; while(!feof(file_stream)) } |
上面的代码中我加了注释,这里没必须再做解释。
下面来看我的运行结果:
| Starting iteration 1. Starting action Action. Action.c(24): 文件的前50字符:01234567890123456789012345678901234567890123456789 Ending action Action. Ending iteration 1. |
LoadRunner难么?对于有编程基础的一点都不都。我们所要做的就是熟悉LoadRunner的常用函数罢了。

浙公网安备 33010602011771号