51Testing软件测试论坛

标题: 老布丁带你入门Loadrunner [打印本页]

作者: 老布丁    时间: 2017-7-6 12:28
标题: 老布丁带你入门Loadrunner
分享一下入门级的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);
          }
作者: jingzizx    时间: 2017-7-6 16:57

作者: 老布丁    时间: 2017-7-7 12:23
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中为超时时间,就会退出,交易失败)
   
作者: qq8784725    时间: 2017-7-7 14:03
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判
作者: Kyle_nr    时间: 2017-7-7 17:19
qq8784725 发表于 2017-7-7 14:03
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判

那检查点用什么
作者: 老布丁    时间: 2017-7-10 12:44
7、如何设置参数呢?这个会分多次进行分享
   参数的目的就是把一个固定的值设置成变量,以模拟真实的数据情况。
   loadrunner提供了多种设置参数的方式,例如file、date/time、Unique Number等。
   今天先看下file的方式。
[attach]107147[/attach]
这个参数文件中有两个参数,分别的userpwd,打开后,可以看到其中两个参数使用“,”分割,selectColumn中,By number,为取值是哪来一列,当然也可以直接指定列的名称,例如user。

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

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



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

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


作者: 老布丁    时间: 2017-7-12 12:33
如果在参数化的时候,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不是作为一个参数处理的,而是当成了一个字符串。
作者: 老布丁    时间: 2017-7-13 12:36
如果HTTP协议,应用程序对头做了特殊的处理怎么办,提供1种解决方法,页面其实也提供了添加的方式,但还是直接写比较方便:

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

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

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



作者: 老布丁    时间: 2017-7-17 13:00
       
1、在每个Accion中,正常情况下都回有return 0;这个是做什么用的呢?

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


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

答案是全局的
作者: 老布丁    时间: 2017-7-18 12:39

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填写参数的值,


作者: 老布丁    时间: 2017-7-19 13:19
集合点。
  1.         lr_rendezvous("集合点");
复制代码


那么我们来看下controller中集合点的设置,就是在每个请求前,可以控制有多少用户来同时发起一个请求。可以按照并发的用户数来进行设置,也可以按照比例来进行设置。
并且设置了超时的时间,超过超时的时间,即使没有达到要求的用户数或比例,也会继续发送请求的。
作者: 老布丁    时间: 2017-7-20 12:23
今天来讲讲LR中的点击率,记得我在刚刚开始做性能测试的时候,理解点击是不是就是我们录制的时候,按钮的每一次点击呢?当然是否定的。
后来继续做着做着,发现点击数量的计算是每次发送的请求的数量,每秒钟的点击率可以理解为每秒钟发送请求的数量,在每次加载页面时都可以提交多个请求。

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

作者: 老布丁    时间: 2017-7-24 11:38
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
复制代码


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

可以选择这个脚本的执行运行时间,如图3。
作者: 老布丁    时间: 2017-7-26 12:47
有的时候,某些协议无法完成,那可以采取java_vuser协议的方式。


作者: 老布丁    时间: 2017-7-26 12:50

按照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. }

复制代码

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

之后按照图2,添加机器2的ip地址做为负载机即可。
作者: 老布丁    时间: 2017-8-1 16:40
当有多个浏览器,想要指定的时候,需要在Run-time Settings中设置Browser Emulation的User-Agent值。具体如图所示
作者: lsekfe    时间: 2017-8-2 09:32
支持下~
作者: zeroempty    时间: 2017-8-10 16:51
支持~~~~~~
作者: 奈何桥过客    时间: 2017-8-17 14:35

作者: a大脸猫爱吃鱼a    时间: 2017-9-1 10:39
不错
作者: 北极小鱼    时间: 2018-1-5 12:01
谢谢 学习了
作者: smartsbaby    时间: 2019-4-17 16:40
多谢楼主分享经验!!
作者: Miss_love    时间: 2020-12-25 15:38
感谢分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2