老布丁 发表于 2017-7-6 12:28:32

老布丁带你入门Loadrunner

分享一下入门级的LoadRunner使用,能坚持多久不知道。欢迎拍砖。
老布丁分享入门LoadRunner-Http-1
1、在正常情况下,录制登陆、新增等业务操作,我们录制的是什么呢?
录制的是Http发送给服务器的请求,HTTP请求包含请求头、主体等信息(当然有的时候,可能请求中没有主体),服务器收到请求后,给予一定的响应。

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

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

post请求
                       
                web_submit_data("post(自定义名称)",
                "Action=http://Ip:Port/****/****",
                "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("POST");
   web_url();
   web_url();
   lr_end_transaction("POST");   

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("POST",LR_PASS);
          }

          else
          {
                lr_end_transaction("POST",LR_FAIL);
          }

老布丁 发表于 2017-7-26 12:47:16

有的时候,某些协议无法完成,那可以采取java_vuser协议的方式。

jingzizx 发表于 2017-7-6 16:57:34

老布丁 发表于 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个选项都进行勾选。在日志中能看到如下信息,先针对一些信息已经一些简要的说明。
Action9002.c(6): Notify: Transaction "POST" started.      
   Action9002.c(8): web_reg_save_param started       
   Action9002.c(8): Registering web_reg_save_param was successful       
   Action9002.c(17): web_custom_request("POST") started       
   Action9002.c(17): Notify: Parameter Substitution: parameter "userid" ="1298"    设置的参数取的值,后面会分享这个。

   Content-Type: text/xml; charset=utf-8\r\n是一个html类型。
   Action9002.c(17):   User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)\r\n   
   Action9002.c(17):   Content-Length: 439\r\n消息主体大小
    Convert from/to UTF-8: No           字符集
    HTTP version: 1.1                     协议的版本号
    Keep-Alive HTTP connections: Yes              
        是否采取长连接,这个在1.1版本逐渐进行了弱化。1.0版本是默认为短连接,需要指定才是长连接。在1.1版本除了这个参数外还提供另外的一个参数,默认是开启长连接。
    过程中执行的一些操作。

6、思考时间?
    首先需要明确为什么要加思考时间?目的是为了更好的模拟客户操作的实际情况,客户不会新增完,立刻就执行其它操作,会有一个间隔的时间。
        增加思考时间会影响到什么呢?
        1、影响到给系统的压力的大小,进而会影响TPS、响应时间、资源占用率等等
           这个很好理解,比如说去麦当劳点餐,每个点餐的人就相当于1个请求,如果服务员每隔3秒才能处理完一次点餐,那么点餐的人每个一秒中来一个和每5秒来一个人点餐是不同的,
           每一秒来一个点餐(请求),服务员会越来越处理不过来,因为其他人必须到等待,响应时间会越来越长。有些客户会达到自己的等待极限(Http中为超时时间,就会退出,交易失败)
   

qq8784725 发表于 2017-7-7 14:03:49

测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判

Kyle_nr 发表于 2017-7-7 17:19:27

qq8784725 发表于 2017-7-7 14:03
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判

那检查点用什么

老布丁 发表于 2017-7-10 12:44:55

7、如何设置参数呢?这个会分多次进行分享
   参数的目的就是把一个固定的值设置成变量,以模拟真实的数据情况。
   loadrunner提供了多种设置参数的方式,例如file、date/time、Unique Number等。
   今天先看下file的方式。

这个参数文件中有两个参数,分别的user和pwd,打开后,可以看到其中两个参数使用“,”分割,selectColumn中,By number,为取值是哪来一列,当然也可以直接指定列的名称,例如user。
经常会出现参数设置后,不知道如何运行的问题,其实loadrunner提供了模拟参数分配的功能,使用Simulate Parameter即可知道参数的取值情况。例如 ,如果设置了如下的情况,在运行时如何取值的呢!
使用Simulate Paramete,设置两个用户并发,循环2次,我们可以发现sequential Each iteration组合时,其所有的用户在第一次循环的时候,都取的是第一行的值。

787628400 发表于 2017-7-10 16:44:45

活到老学到老:time:

老布丁 发表于 2017-7-11 12:53:03

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

           web_reg_save_param("ResultTest",
                "LB=\"a\":\"",
                "RB=\",\"b\":",
                LAST);

老布丁 发表于 2017-7-12 12:33:49

如果在参数化的时候,LR提供的参数不能满足,怎么办呢?

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

      

                web_submit_data("test",
                等等等脚本
                "Name=sign", "Value={signnew}",ENDITEM,
               
                LAST);



      
   

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

老布丁 发表于 2017-7-13 12:36:14

如果HTTP协议,应用程序对头做了特殊的处理怎么办,提供1种解决方法,页面其实也提供了添加的方式,但还是直接写比较方便:

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

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

    web_save_header(RESPONSE, "ResponseHeader");//响应的头进行保存

老布丁 发表于 2017-7-17 13:00:11

       
1、在每个Accion中,正常情况下都回有return 0;这个是做什么用的呢?

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


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

答案是全局的

老布丁 发表于 2017-7-18 12:39:24


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

web_custom_request("sendmt.do",
                "URL=访问的地址",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/xml",
                "Referer=",
                "Snapshot=t1.inf",
                "Mode=HTML",
                "EncType=text/xml; charset=utf-8",
                "Body=",
                LAST);







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

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

老布丁 发表于 2017-7-19 13:19:16

集合点。
        lr_rendezvous("集合点");

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

老布丁 发表于 2017-7-20 12:23:15

今天来讲讲LR中的点击率,记得我在刚刚开始做性能测试的时候,理解点击是不是就是我们录制的时候,按钮的每一次点击呢?当然是否定的。
后来继续做着做着,发现点击数量的计算是每次发送的请求的数量,每秒钟的点击率可以理解为每秒钟发送请求的数量,在每次加载页面时都可以提交多个请求。

老布丁 发表于 2017-7-21 12:49:41

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

老布丁 发表于 2017-7-24 11:38:39

LR设置连接服务器,监控linux服务器资源。
1.        yum -y install rsh*
2.        下载并安装rstatd
3.        tar -xvf rpc.rstatd-4.0.1.tar.gz
4.        ./configure —配置
5.        make —编译
6.        make install —安装
7.        rpc.rstatd —启动rstatd进程
8.        修改的是/etc/xinetd.d/下的三个conf文件 rlogin ,rsh,rexec 这三个配置文件,打这三个文件里的disable = yes都改成 disable = no

老布丁 发表于 2017-7-25 12:23:56

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

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

老布丁 发表于 2017-7-26 12:50:19


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


public class Actions
{


        public int init() throws Throwable {

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


        public int action() throws Throwable {

             //服务地址


            try{

                lr.start_transaction("HTTP_WebService");
               //执行相应的业务代码
               
                lr.end_transaction("HTTP_WebService", lr.PASS);
          } catch (Exception e) {
               e.printStackTrace();
               lr.end_transaction("HTTP_WebService", lr.FAIL);
          } finally {
               
          }


                return 0;
        }//end of action


        public int end() throws Throwable {
                return 0;
        }//end of end
}

老布丁 发表于 2017-7-27 17:00:03

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

之后按照图2,添加机器2的ip地址做为负载机即可。
页: [1] 2
查看完整版本: 老布丁带你入门Loadrunner