zoukankan      html  css  js  c++  java
  • LoadRunner脚本编写之一

    性能测试工程师要懂代码么?答案是必须的。好多测试员认为在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的常用函数罢了。

  • 相关阅读:
    【JMeter_22】JMeter逻辑控制器__录制控制器<Recording Controller>
    【JMeter_21】JMeter逻辑控制器__模块控制器<Module Controller>
    【JMeter_20】JMeter逻辑控制器__事务控制器<Transaction Controller>
    【JMeter_19】JMeter逻辑控制器__简单控制器<Simple Controller>
    【JMeter_18】JMeter逻辑控制器__吞吐量控制器<Throughput Controller>
    【JMeter_17】JMeter逻辑控制器__随机顺序控制器<Random Order Controller>
    【JMeter_16】JMeter逻辑控制器__随机控制器<Random Controller>
    【JMeter_15】JMeter逻辑控制器__仅一次控制器<Once Only Controller>
    Golang错误和异常处理的正确姿势
    用beego开发服务端应用
  • 原文地址:https://www.cnblogs.com/chamge/p/2921927.html
Copyright © 2011-2022 走看看