LoadRunner脚本编写之一

长平狐 发布于 2013/03/12 13:23
阅读 473
收藏 0

 

性能测试工程师要懂代码么?答案是必须的。好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了。还有非计算机专业出身的测试员,所以对代码望都比较望而生畏。

好多人认为loadrunner只支持C语言(包括我之前也一直这么认为),因为loadrunner默认的脚本是C语言的,其实它支持目前所有主流的语言,如:Java UserVB UserVB script User Javascript UserMmicrosoft .NET等,总有一款适合你的吧,最起码C语言是必修课吧。 

对于编写loadrunner脚本的态度

现在有一辆自行车放在你的面前,你为显示自己体力很好,每天走路去上班。我骑车只要半小时,而你走路却要2小时,我们的目的是一样的,你是为了让人说你牛呢,还是让人说你傻呢?当然自行车不是万能的,比如,上班的地点在山上,自行车跟本上不去,自然走路就是唯一的选择了。

所以,对于loadrunner脚本,能录制的部分就录制改,不能录制的就手写,但前提是我们要会写脚本。

 

 认识loadrunner脚本

Loadrunner自带了一个小飞机订票系统

 

我们先启动 Start Web server 服务,如果启动成功,桌面右下角会有一个绿色的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 #define SALARY 4000 Action(){ int total; total = COUNT * SALARY; lr_output_message( " 100人合计薪资支出为:%d " ,total); return 0 ;}

#define COUNT 100

#define SALARY 4000     定义一个全局常量。

lr_output_message    输出语句,这个和我们所学的语言不一样,在C中我们会用println 来输入结果。

运行结果:

..........
Starting iteration 1
.Starting action Action.Action.c( 9): 100人合计薪资支出为:400000 ---- 这里将运行结果打印输出Ending action Action.Ending iteration 1 .
..........

 

一个有意思的小程序                                                               

 

当然了,上面的程序太鸡肋了,我只是想表达,loadrunner 也可以运行我们上学时学的那些普通的小程序。他们是一样一样的。

 

下面看个比较有意思的小程序,通过随即数和分支(选择)语句switch来完成

 

Action(){ int randomnumber; randomnumber = rand() % 3+ 1 ; switch (randomnumber) { case 1 : { lr_rendezvous( " 访问百度集合点 " ); web_url( " www.baidu.com " , " URL=http://www.baidu.com/ " , " Resource=0 " , " RecContentType=text/html " , " Referer= " , " Snapshot=t12.inf " , " Mode=HTML " , EXTRARES, " Url=http://s1.bdstatic.com/r/www/img/i-1.0.0.png " , ENDITEM, " Url=/favicon.ico ", " Referer= " , ENDITEM, " Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif " , ENDITEM, LAST); return 0 ; } case 2 : { lr_rendezvous( " 访问谷歌集合点 " ); web_url( " www.google.com.hk " , " URL=http://www.google.com.hk/ " , " Resource=0 " , " RecContentType=text/html " , " Referer= " , " Snapshot=t10.inf " , " Mode=HTML " , EXTRARES, " Url=http://ssl.gstatic.com/gb/images/b_8d5afc09.png " , ENDITEM, " Url=/images/srpr/logo3w.png " , ENDITEM, " Url=/extern_chrome/749e1ce3c3e5f171.js " , ENDITEM, " Url=/images/swxa.gif " , ENDITEM, " Url=/favicon.ico ", " Referer= " , ENDITEM, " Url=http://ssl.gstatic.com/gb/js/sem_0e1289051da7e9e3697c2025d9490acd.js " , ENDITEM, " Url=http://www.google.com/textinputassistant/tia.png " , ENDITEM, LAST); return 0 ; } case 3 : { lr_rendezvous( " 访问有道集合点 " ); web_url( " www.youdao.com " , " URL=http://www.youdao.com/ " , " Resource=0 " , " RecContentType=text/html " , " Referer= " , " Snapshot=t7.inf " , " Mode=HTML " , EXTRARES, " Url=http://shared.ydstatic.com/oxo/p/pic.gif " , ENDITEM, " Url=http://shared.ydstatic.com/oxo/p/logo.png?1 " , ENDITEM, " Url=http://shared.ydstatic.com/oxo/p/nv_line.gif " , ENDITEM, " Url=http://shared.ydstatic.com/r/2.0/p/pic.gif " , ENDITEM, LAST); 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 ; char buffer [ 50 ]; long file_stream; char * filename = " C:\\test.txt "; // 读取文件的存放位置 // 判断是否可以读取文件 if((file_stream =fopen(filename, " r "))== NULL) { lr_error_message( " 不能打开%s文件! " ,filename); return - 1 ; } while(! feof(file_stream)) { count=fread(buffer, sizeof( char), 50,file_stream); // 从文件中读取50个字符 total=total+count; // 字符个数计数 if(total>= 50 ) { fclose(file_stream); // 关闭文件 lr_output_message( " 文件的前50字符:%s " ,buffer); break; // 退出循环 } } return 0 ;}

 

上面的代码中我加了注释,这里没必须再做解释。

下面来看我的运行结果

Starting iteration 1 .Starting action Action.Action.c( 24): 文件的前50字符: 01234567890123456789012345678901234567890123456789 Ending action Action.Ending iteration 1.

 

     loadrunner难么? 对于有编程基础的一点都不都。我们所要做的就是熟悉loadrunner的常用函数罢了。

 


原文链接:http://www.cnblogs.com/fnng/archive/2012/07/15/2592344.html
加载中
0
冬
学习了!!
返回顶部
顶部