51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 14098|回复: 27
打印 上一主题 下一主题

老布丁带你入门Loadrunner

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-7-6 12:28:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享一下入门级的LoadRunner使用,能坚持多久不知道。欢迎拍砖。
老布丁分享入门LoadRunner-Http-1
1、在正常情况下,录制登陆、新增等业务操作,我们录制的是什么呢?
录制的是Http发送给服务器的请求,HTTP请求包含请求头、主体等信息(当然有的时候,可能请求中没有主体),服务器收到请求后,给予一定的响应。

2、一般我们请求中,都是get或者post方法,当然还有其他的put、delete方法,那录制的哪些是对应的get和post方法呢?
get请求

web_url("get(自定义名称) ",
                        "url=http://Iport/****/****?参数1=8888&参数2=8888,"
                        LAST);

post请求
                       
                web_submit_data("post(自定义名称)",
                "Action=http://Iport/****/****",
                "Method=POST",
                "Referer=",
                "Snapshot=t3.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=参数1", "Value=值", ENDITEM,
                "Name=参数2", "Value=值", ENDITEM,        
                LAST);
               

3、如何设置事务?
   首先要了解Loadrunner的事务指的是什么?事务就是对请求进行分组,目的是对1个或多个请求汇总其响应时间等指标。
   为什么需要对多个请求汇总成事务呢?因为我们往往想考查一个功能(例如查询)的性能情况,但其实查询这个功能需要发送多个HTTP请求,因此需要把多个请求进行汇总。
   当然,如果要是录制的方式,在录制的时候可以进行插入事务的。
   lr_start_transaction("OST");
   web_url();
   web_url();
   lr_end_transaction("OST");     

4、如何判断脚本是否执行成功呢?
   如果不对脚本进行更改,录制的时候未设置检查点,那Loadrunner发送请求后,接收到服务器的响应就认为是成功的。
   虽然有时候,响应不是我们想要的,但Loadrunner还认为是成功的,因此需要人工判断事务是否成功。那如何判断事务是否成功呢?
   首先,我们需要明确,事务是否成功是基于响应的,因此都是对Http响应的判断。现在提供两种判断事务是否成功的方法。注意,因为方法为reg,因此需要放到请求的前面。
    方法1:在相应中找到100,即判断为成功            
        web_reg_find("Text=100",
                LAST);
        方法2:先把服务器返回的需要判断的值保存起来,之后通过这个值对比,判断事务是否成功。
     web_reg_save_param("ResultTest",
                "LB=左边界",
                "RB=右边界",
                LAST);
               
               
                        if(strcmp(lr_eval_string("{ResultTest}"),"Succ")==0)
         {
                lr_end_transaction("OST",LR_PASS);
          }

          else
          {
                lr_end_transaction("OST",LR_FAIL);
          }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏12
回复

使用道具 举报

该用户从未签到

推荐
 楼主| 发表于 2017-7-26 12:47:16 | 只看该作者
有的时候,某些协议无法完成,那可以采取java_vuser协议的方式。

回复 支持 1 反对 0

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2017-7-7 12:23:34 | 只看该作者
5、怎么查看回放的结果呢?我已经设置了脚本,但如何看执行的过程的呢?有两种方式:
   方式1:General Options ---Display,选择Show run-time viewer during re,即可看到回放的页面了。
   方式2:查看Replay Log,在Vuser--Runtime Settings中设置log为Extended log 下面的3个选项都进行勾选。在日志中能看到如下信息,先针对一些信息已经一些简要的说明。
  1. Action9002.c(6): Notify: Transaction "POST" started.      
  2.    Action9002.c(8): web_reg_save_param started          [MsgId: MMSG-26355]
  3.    Action9002.c(8): Registering web_reg_save_param was successful          [MsgId: MMSG-26390]
  4.    Action9002.c(17): web_custom_request("POST") started          [MsgId: MMSG-26355]
  5.    Action9002.c(17): Notify: Parameter Substitution: parameter "userid" =  "1298"    设置的参数取的值,后面会分享这个。

  6.    Content-Type: text/xml; charset=utf-8\r\n  是一个html类型。
  7.    Action9002.c(17):     User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)\r\n   
  8.    Action9002.c(17):     Content-Length: 439\r\n  消息主体大小
复制代码

    Convert from/to UTF-8: No          [MsgId: MMSG-26845]     字符集
    HTTP version: 1.1          [MsgId: MMSG-26845]             协议的版本号
    Keep-Alive HTTP connections: Yes          [MsgId: MMSG-26845]      
        是否采取长连接,这个在1.1版本逐渐进行了弱化。1.0版本是默认为短连接,需要指定才是长连接。在1.1版本除了这个参数外还提供另外的一个参数,默认是开启长连接。
    过程中执行的一些操作。
  
6、思考时间?
    首先需要明确为什么要加思考时间?目的是为了更好的模拟客户操作的实际情况,客户不会新增完,立刻就执行其它操作,会有一个间隔的时间。
        增加思考时间会影响到什么呢?
        1、影响到给系统的压力的大小,进而会影响TPS、响应时间、资源占用率等等
           这个很好理解,比如说去麦当劳点餐,每个点餐的人就相当于1个请求,如果服务员每隔3秒才能处理完一次点餐,那么点餐的人每个一秒中来一个和每5秒来一个人点餐是不同的,
           每一秒来一个点餐(请求),服务员会越来越处理不过来,因为其他人必须到等待,响应时间会越来越长。有些客户会达到自己的等待极限(Http中为超时时间,就会退出,交易失败)
   
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2017-7-7 14:03:49 | 只看该作者
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2017-7-7 17:19:27 | 只看该作者
qq8784725 发表于 2017-7-7 14:03
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判

那检查点用什么
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2017-7-10 12:44:55 | 只看该作者
7、如何设置参数呢?这个会分多次进行分享
   参数的目的就是把一个固定的值设置成变量,以模拟真实的数据情况。
   loadrunner提供了多种设置参数的方式,例如file、date/time、Unique Number等。
   今天先看下file的方式。

这个参数文件中有两个参数,分别的userpwd,打开后,可以看到其中两个参数使用“,”分割,selectColumn中,By number,为取值是哪来一列,当然也可以直接指定列的名称,例如user。

经常会出现参数设置后,不知道如何运行的问题,其实loadrunner提供了模拟参数分配的功能,使用Simulate Parameter即可知道参数的取值情况。
例如 ,如果设置了如下的情况,在运行时如何取值的呢!

使用Simulate Paramete,设置两个用户并发,循环2次,我们可以发现sequential Each iteration组合时,其所有的用户在第一次循环的时候,都取的是第一行的值。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2017-7-10 13:49
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]测试排长

    8#
    发表于 2017-7-10 16:44:45 | 只看该作者
    活到老学到老
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2017-7-11 12:53:03 | 只看该作者
    今天讲解一下关联,这个很多刚刚开始接触Loadrunner的同学会觉得关联不容易理解,其实我一直把关联当成是参数,只是这个参数是把服务器返回的值进行一下保存。
    1、分为自动关联
    运行2次脚本后,在Correlation Results会区分出服务器两次返回中不同的值,根据情况进行关联即可。
    2、手动关联
    我一般都是切换到tree的目录结构,找到服务器响应的值,鼠标右键即可找到关联。
    3、写脚本关联
    这个我在原来的文章中已经介绍过了 ,要注意的是,例如”的字符需要转义等。在后面使用此参数,使用{ResultTest}即可。

    1.            web_reg_save_param("ResultTest",
    2.                 "LB=\"a\":\"",
    3.                 "RB=\",\"b\":",
    4.                 LAST);
    复制代码

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2017-7-12 12:33:49 | 只看该作者
    如果在参数化的时候,LR提供的参数不能满足,怎么办呢?

    1.      char sign[100];
    2.      之后对这个变量根据自己的需要进行处理的脚本。
    3.       //目的是把根据业务处理的变量,变成参数可以供参数化时调用。
    4.         lr_save_string(sign,"signnew");

    5.       

    6.                 web_submit_data("test",
    7.                 等等等脚本
    8.                 "Name=sign", "Value={signnew}",ENDITEM,
    9.                
    10.                 LAST);



    11.       
    12.    
    复制代码


    为什么一定要这样进行处理呢?因为Value=sign的时候,sign不是作为一个参数处理的,而是当成了一个字符串。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2017-7-13 12:36:14 | 只看该作者
    如果HTTP协议,应用程序对头做了特殊的处理怎么办,提供1种解决方法,页面其实也提供了添加的方式,但还是直接写比较方便:

    1.         web_add_header("name",        "value");//增加头信息

    2.     web_save_header(REQUEST, "RequestHeader");//请求的头进行保存

    3.     web_save_header(RESPONSE, "ResponseHeader");//响应的头进行保存
    复制代码


    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2017-7-17 13:00:11 | 只看该作者
           
    1、在每个Accion中,正常情况下都回有return 0;这个是做什么用的呢?

    我的理解是这个        return 0;是为了跳出其对应的Action,告诉LR,这个Action已经到末尾了,需要执行下一个了。


    2、对于我们定义的参数而言是全局的还是针对某一个Action有效呢

    答案是全局的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2017-7-18 12:39:24 | 只看该作者

    1、 首先了解一下WebService协议,使用XML消息调用远程方法,这样WebService可以通过HTTP协议的方法与远程机器交互,因此其可以通过HTTP请求编写测试脚本。当然LoadRunner本身也提供了WebService协议的脚本编写方式,通过访问WSDL的地址,可以识出相应的方法和参数,有兴趣的同学,可以尝试,后面提供了第2种方法。
        2、 编写的脚本如下:
        使用web_custom_request(),其中URL为WebService的发布地址,Body为消息内容,根据项目实际情况进行调整。

    1. web_custom_request("sendmt.do",
    2.                 "URL=访问的地址",
    3.                 "Method=POST",
    4.                 "Resource=0",
    5.                 "RecContentType=text/xml",
    6.                 "Referer=",
    7.                 "Snapshot=t1.inf",
    8.                 "Mode=HTML",
    9.                 "EncType=text/xml; charset=utf-8",
    10.                 "Body=",
    11.                 LAST);
    复制代码







        使用第1种方法编写webservice脚本的方法介绍完毕,下面介绍第2种方法,通过webservice协议,编写脚本。
        步骤1:选择Manage Services的import加入wsdl的地址。

        步骤2:通过Add Service Call识别出现在的方法及参数,Operation中选择要测试的方法,并且在Arguments填写参数的值,

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2017-7-19 13:19:16 | 只看该作者
    集合点。
    1.         lr_rendezvous("集合点");
    复制代码


    那么我们来看下controller中集合点的设置,就是在每个请求前,可以控制有多少用户来同时发起一个请求。可以按照并发的用户数来进行设置,也可以按照比例来进行设置。
    并且设置了超时的时间,超过超时的时间,即使没有达到要求的用户数或比例,也会继续发送请求的。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2017-7-20 12:23:15 | 只看该作者
    今天来讲讲LR中的点击率,记得我在刚刚开始做性能测试的时候,理解点击是不是就是我们录制的时候,按钮的每一次点击呢?当然是否定的。
    后来继续做着做着,发现点击数量的计算是每次发送的请求的数量,每秒钟的点击率可以理解为每秒钟发送请求的数量,在每次加载页面时都可以提交多个请求。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
     楼主| 发表于 2017-7-21 12:49:41 | 只看该作者
    在录制或者编写脚本的时候,经常会有人问,是B/s或者C/s,是java还是c开发的,怎么录制呢。对于LR而已,和架构和语言都没有关系,只和协议有关。那么如何区分是什么协议呢?LR提供了一种识别协议的方法。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2017-7-24 11:38:39 | 只看该作者
    LR设置连接服务器,监控linux服务器资源。
    1. 1.        yum -y install rsh*
    2. 2.        下载并安装rstatd
    3. 3.        tar -xvf rpc.rstatd-4.0.1.tar.gz
    4. 4.        ./configure —配置
    5. 5.        make —编译
    6. 6.        make install —安装
    7. 7.        rpc.rstatd —启动rstatd进程
    8. 8.        修改的是/etc/xinetd.d/下的三个conf文件 rlogin ,rsh,rexec 这三个配置文件,打这三个文件里的disable = yes都改成 disable = no
    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
     楼主| 发表于 2017-7-25 12:23:56 | 只看该作者
    脚本编写完了,服务器的监控也配置好了,怎么运行呢?
    在controller中,选择一个需要执行压力的脚本,如图1,如图2,增加虚拟用户的机器,现在选择是本机。为什么有这个呢?因为LR可以使用1台机器,控制其他的机器来生成负载的用户。以后会讲到这个方面的内容,今天主要是讲解如何执行压力。

    可以选择这个脚本的执行运行时间,如图3。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
     楼主| 发表于 2017-7-26 12:50:19 | 只看该作者

    按照1,2的步骤,选择本机所在的路径及引用的jar包的位置。在action中
    1. import lrapi.lr;


    2. public class Actions
    3. {


    4.         public int init() throws Throwable {

    5. //           HttpClientFactory.getOnly().getHttpClient().setMaxTotalConnections(1000);
    6.             
    7.                 return 0;
    8.         }//end of init


    9.         public int action() throws Throwable {

    10.              //服务地址


    11.             try{

    12.                 lr.start_transaction("HTTP_WebService");
    13.                //执行相应的业务代码
    14.                
    15.                 lr.end_transaction("HTTP_WebService", lr.PASS);
    16.             } catch (Exception e) {
    17.                  e.printStackTrace();
    18.                  lr.end_transaction("HTTP_WebService", lr.FAIL);
    19.             } finally {
    20.                
    21.             }


    22.                 return 0;
    23.         }//end of action


    24.         public int end() throws Throwable {
    25.                 return 0;
    26.         }//end of end
    27. }

    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
     楼主| 发表于 2017-7-27 17:00:03 | 只看该作者
    如何多台机器一起进行性能测试。
    首先必须两个机器都需要安装LR,一台(机器1)做为控制机,机器2做为被控制机。
    在机器2中要按照如图1,开启agent,输入用户名和密码后,机器2即可以做为负载机使用。

    之后按照图2,添加机器2的ip地址做为负载机即可。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-12 21:24 , Processed in 0.074732 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表