老布丁带你入门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);
} 有的时候,某些协议无法完成,那可以采取java_vuser协议的方式。
赞 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中为超时时间,就会退出,交易失败)
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判 qq8784725 发表于 2017-7-7 14:03
测试过程中建议不要实用we_reg_find。因为不能精确找到检查点,可能误判
那检查点用什么 7、如何设置参数呢?这个会分多次进行分享
参数的目的就是把一个固定的值设置成变量,以模拟真实的数据情况。
loadrunner提供了多种设置参数的方式,例如file、date/time、Unique Number等。
今天先看下file的方式。
这个参数文件中有两个参数,分别的user和pwd,打开后,可以看到其中两个参数使用“,”分割,selectColumn中,By number,为取值是哪来一列,当然也可以直接指定列的名称,例如user。
经常会出现参数设置后,不知道如何运行的问题,其实loadrunner提供了模拟参数分配的功能,使用Simulate Parameter即可知道参数的取值情况。例如 ,如果设置了如下的情况,在运行时如何取值的呢!
使用Simulate Paramete,设置两个用户并发,循环2次,我们可以发现sequential Each iteration组合时,其所有的用户在第一次循环的时候,都取的是第一行的值。
活到老学到老:time: 今天讲解一下关联,这个很多刚刚开始接触Loadrunner的同学会觉得关联不容易理解,其实我一直把关联当成是参数,只是这个参数是把服务器返回的值进行一下保存。
1、分为自动关联
运行2次脚本后,在Correlation Results会区分出服务器两次返回中不同的值,根据情况进行关联即可。
2、手动关联
我一般都是切换到tree的目录结构,找到服务器响应的值,鼠标右键即可找到关联。
3、写脚本关联
这个我在原来的文章中已经介绍过了 ,要注意的是,例如”的字符需要转义等。在后面使用此参数,使用{ResultTest}即可。
web_reg_save_param("ResultTest",
"LB=\"a\":\"",
"RB=\",\"b\":",
LAST);
如果在参数化的时候,LR提供的参数不能满足,怎么办呢?
char sign;
之后对这个变量根据自己的需要进行处理的脚本。
//目的是把根据业务处理的变量,变成参数可以供参数化时调用。
lr_save_string(sign,"signnew");
web_submit_data("test",
等等等脚本
"Name=sign", "Value={signnew}",ENDITEM,
LAST);
为什么一定要这样进行处理呢?因为Value=sign的时候,sign不是作为一个参数处理的,而是当成了一个字符串。 如果HTTP协议,应用程序对头做了特殊的处理怎么办,提供1种解决方法,页面其实也提供了添加的方式,但还是直接写比较方便:
web_add_header("name", "value");//增加头信息
web_save_header(REQUEST, "RequestHeader");//请求的头进行保存
web_save_header(RESPONSE, "ResponseHeader");//响应的头进行保存
1、在每个Accion中,正常情况下都回有return 0;这个是做什么用的呢?
我的理解是这个 return 0;是为了跳出其对应的Action,告诉LR,这个Action已经到末尾了,需要执行下一个了。
2、对于我们定义的参数而言是全局的还是针对某一个Action有效呢
答案是全局的
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填写参数的值,
集合点。
lr_rendezvous("集合点");
那么我们来看下controller中集合点的设置,就是在每个请求前,可以控制有多少用户来同时发起一个请求。可以按照并发的用户数来进行设置,也可以按照比例来进行设置。
并且设置了超时的时间,超过超时的时间,即使没有达到要求的用户数或比例,也会继续发送请求的。 今天来讲讲LR中的点击率,记得我在刚刚开始做性能测试的时候,理解点击是不是就是我们录制的时候,按钮的每一次点击呢?当然是否定的。
后来继续做着做着,发现点击数量的计算是每次发送的请求的数量,每秒钟的点击率可以理解为每秒钟发送请求的数量,在每次加载页面时都可以提交多个请求。
在录制或者编写脚本的时候,经常会有人问,是B/s或者C/s,是java还是c开发的,怎么录制呢。对于LR而已,和架构和语言都没有关系,只和协议有关。那么如何区分是什么协议呢?LR提供了一种识别协议的方法。
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
脚本编写完了,服务器的监控也配置好了,怎么运行呢?
在controller中,选择一个需要执行压力的脚本,如图1,如图2,增加虚拟用户的机器,现在选择是本机。为什么有这个呢?因为LR可以使用1台机器,控制其他的机器来生成负载的用户。以后会讲到这个方面的内容,今天主要是讲解如何执行压力。
可以选择这个脚本的执行运行时间,如图3。
按照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
}
如何多台机器一起进行性能测试。
首先必须两个机器都需要安装LR,一台(机器1)做为控制机,机器2做为被控制机。
在机器2中要按照如图1,开启agent,输入用户名和密码后,机器2即可以做为负载机使用。
之后按照图2,添加机器2的ip地址做为负载机即可。
页:
[1]
2