性能测试: 功能是否能做 ,性能是做的如何,怎么样?
并发 :同时访问一个功能 ,一个操作或一个服务器
响应时间 :快慢问题
需求 : 响应时间不超过3s
验证 :验证预期结果是否达到性能需求的要求
Vugen生成脚本,由Controller将脚本分发到每台压力机上, 压力机模拟虚拟用户向服务器发送请求,服务器接收请求, 作出相应的响应,Controller监控整个过程服务器的指标, 最后生成报告发送给analysis
开始-->HP LR-->virtual user generator -->new
新建脚本选择网络协议
2.1如何选择协议
通过抓包工具抓取
查看性能需求文档
查看接口文档
询问开发
凭经验-web-http
2.2 单协议脚本
2.3 多协议脚本
录制框选择
3.1 选择被测系统的类型 :
-浏览器 -非浏览器
3.2 录制时采用的浏览器
-IE : 7,8,9,10
-Firefox : C:\Program Files(x86)\HP\LoadRunner\bin\firefox\firefox.exe(LR自带,最好将自己高版本firefox卸载)
3.3 被测服务器地址-图
3.4 设置录制选项
3.4.1 General----Recording
(1) weblink、websubmit_form(示范) 依赖上下文关系 ; 编写规则: web_link("访问首页","Text=LoadRunner",LAST);
(2) weburl、websubmit_data(示范) 不依赖上下文关系编写规则: web_url("访问首页","url=http://www.baidu.com",LAST)
;
抓取全部的http请求,适合基于非浏览器的脚本录制
步骤:
1、首先确定脚本中需要参数化的对象/数据(变化的)
2、选中目标数据,右击选择 replace-with-a-parameter
3、填写参数名称,点击确定
4、右键再点击选择参数属性或按下ctrl+L(右上角的P)打开参数设置界面,增加或修改数据,可点击 editwith-notepad
进行编辑,设置参数取值策略(默认)
注意:参数化文件中的测试数据最后一行不能有空行
5、迭代次数设置: vuser--runtimesetting--logic--
50次
总结 :
参数化核心 :1.参数 2.修改运行次数
web_reg_find("Text=sai001",LAST)
;
注册检查点
(1)打算要检查什么告诉脚本, 脚本先声明变量把要检查的东西放进去, 如果在下面的响应中出现就找到了, 找到的次数也会记录。
(2)放在要检查的请求前面就行
什么时候要加检查点
验证业务逻辑
登陆是否登陆上 200-登陆不成功状态响应码也200
不加
LR验证协议状态响应码如果是200就通过 200:只要有响应就是200
登陆成功不成功,检查点区别出现
不重要
性能关心是吞吐量,只要吞吐量没有大变化,数据是否正确不太关心
实际操作 :
插入检查点函数 ;
insert ->new step 插入检查点函数: web_reg_find("Text=xxx",LAST)
;
检查点参数化 ;
总结 :
检查点核心 :
1.检查点函数 web_reg_find("Text=xxx",LAST)
;
2.参数化
3.一定要放在 注册事件函数之前 {(web_find("Text=xxx",LAST)
可以在注册函数之后}
以上代码:
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Mode=HTML",
LAST);
web_url("header.html",
"URL=http://127.0.0.1:1080/WebTours/header.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Mode=HTML",
LAST);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t6.inf",
"Mode=HTML",
LAST);
lr_think_time(7);
web_url("login.pl",
"URL=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",
"TargetFrame=body",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/home.html",
"Snapshot=t7.inf",
"Mode=HTML",
LAST);
lr_think_time(11);
// 添加检查点 因为用户名有10个,所以检查点也要进行参数化 ;每次迭代时更换一个用户名
web_reg_find("Text/DIG={username}",
LAST);
//用户名进行参数化
web_submit_data("login.pl_2",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=info",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value=lisi", ENDITEM,
"Name=passwordConfirm", "Value=lisi", ENDITEM,
"Name=firstName", "Value=", ENDITEM,
"Name=lastName", "Value=", ENDITEM,
"Name=address1", "Value=", ENDITEM,
"Name=address2", "Value=", ENDITEM,
"Name=register.x", "Value=61", ENDITEM,
"Name=register.y", "Value=3", ENDITEM,
LAST);
return 0;
}
为了记录响应时间 ;
① 开始事物
lrstarttransaction("xxx_");
② 结束事物
//添加结束事物, 时间结尾值减去时间开始值,就是中间经历的响应时间
lr_login_transaction("login_",LR_AUTO);
③ 检查点
web_reg_find("Text=lisi", LAST);
注意事项:
不要把开始时间放在思考时间和检查点外面, 要放在具体的action之间
函数名 : lr_think_time(5)
-模拟真实
-等待加载
-不加-测试最大压力
Tree视图 :
背后做了三件事:
注册 session函数
Usersession 参数参数化
查找session函数放置的位置很重要(和检查点有点类似)
脚本回放没问题
加参数化
可以加检查点
检查点的参数化
4. 加事务
开始
结束
5. 如果需要关联加关联
注册没有关联 ,
登陆脚本有关联,
订票脚本没有session .
(一):Run logic
如何模拟实现真实网站在运行时不同的人访问不同的模块? * 用户建模 *
int
action
random 设置随机概率 , 概率总和必须为100%
Block(代码块): 让脚本更加灵活,可单独设置某 几个脚本的运行规则
针对Run和Block都有properties属性设置 - sequential 设置运行顺序
end
(二):pace步长
(三):Log
如果用户有10个,怎么能从日志中看出哪个用户登录? 如何看出参数的替换的变化值,怎么看到服务器响应的数据?
扩展日志打钩可以看到登录的用户—log
runtimesetting-log--expand log
(1) Enable logging启用日志
log options :
当错误出现时发送日志
始终发送日志
标准日志
扩展日志
(四):其他
进程与线程 ???
一个程序一般一个或多个进程,一个进程包含一个或多个线程 ,进程消耗资源大,线程小 ,选择线程可以多加几个虚拟用户
Html : WEB基本选择这个选项 , 包含明确的URL脚本---走底层协议,请求
URL : 如果页面上面有 js
, ajax
,等,回放不成功,可能需要选择这个录制。
(1)录制选项选择
Html : WEB基本选择这个选项 , 包含明确的URL脚本---走底层协议,请求
URL :
如果页面上面有js,ajax,等,回放不成功,可能需要选择这个录制。
(2)解决乱码问题
任务:录制登陆脚本,参数化,关联,检查点,及检查点的参数化,添加事务开始与结束,进行场景设计:找到本机并发登陆最大的临界点,场景策略中日志策略为只有错误才打日志,思考时间策略是忽略思考时间,执行的策略,先是10人,20,。。。50人,70人,等。将最高一次并发保存场景结果并生成分析报告。
场景计划策略,每10秒中上去5个人,持续5分钟,每10下来10个人。
生成报告 13张,包括window的资源加上。
(0) 场景组脚本
(1) 设置用户负载方式
(2) 基本练习
(3) 如何实现这两张图的效果?
截图 :
(1) 状态
(2) 监控界面显示的表
信息
分析与调整
超时-第一步调优,放开超时时间
常用的13项指标截图
响应时间
吞吐量
资源利用率
总结:
概要报告
要加图的顺序和个数
running vusers
错误图
TPS -重要的性能指标之一
Hits
connection
硬件资源
web
按顺序看图将每个图中有问题的部分标记下来
我们从图中的标记的得到一些信息
常见问题 : 1. 录制弹框无法打开浏览器
指定浏览器的位置, 选择loadRunner自带的浏览器
2. UTF-8解决乱码问题
HTTP Properties—Advanced Support Charset UTF-8
3. 如果没有事件
把类似代理的全部关闭
浏览器代理需要设置回自动蓝灯关闭
4. IE不能启动
检查杀毒软件是否关闭
检查IE版本是否是8/9/10
更换为火狐浏览器(自带)
如果始终解决不了,放弃录制,选择手写脚本
5. 更换 submit_data函数
6. 查看图片器 View->test result 查看报告 , 日志
7. 点击录制无响应
方法一:
设置浏览器点工具--Internet选项---高级,把“启用第三方浏览器扩展”去掉,保存。
方法二:
右击我的电脑,选择“属性”,进入“高级”选项卡页面,点性能处的“设置”按钮,选择“数据执行保持”,添加两个程序:IE和vugen.exe.
1)添加IE。点添加按钮,选择IE的安装路径。如我的是C:\Program Files\Internet Explorer\InternetExplore (浏览器看个人喜好选择就行)
2)添加vugen.exe。点添加按钮,选择vugen.exe的安装路径。如我的是
D:\Program Files\HP\LoadRunner\bin\vugen.exe
8. 注册函数
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Mode=HTML",
LAST);
web_url("header.html",
"URL=http://127.0.0.1:1080/WebTours/header.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Mode=HTML",
LAST);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t6.inf",
"Mode=HTML",
LAST);
lr_think_time(7);
web_url("login.pl",
"URL=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",
"TargetFrame=body",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/home.html",
"Snapshot=t7.inf",
"Mode=HTML",
LAST);
lr_think_time(11);
// 添加检查点 因为用户名有10个,所以检查点也要进行参数化 ;每次迭代时更换一个用户名
web_reg_find("Text/DIG={username}",
LAST);
//用户名进行参数化
web_submit_data("login.pl_2",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=info",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value=lisi", ENDITEM,
"Name=passwordConfirm", "Value=lisi", ENDITEM,
"Name=firstName", "Value=", ENDITEM,
"Name=lastName", "Value=", ENDITEM,
"Name=address1", "Value=", ENDITEM,
"Name=address2", "Value=", ENDITEM,
"Name=register.x", "Value=61", ENDITEM,
"Name=register.y", "Value=3", ENDITEM,
LAST);
return 0;
}
9. 登录函数
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Mode=HTML",
LAST);
web_url("header.html",
"URL=http://127.0.0.1:1080/WebTours/header.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Mode=HTML",
LAST);
//Correlation comment - Do not change!Original value='125091.184609154ztDtDHHpiAiDDDDDDizAzpczzif' Name ='CorrelationParameter_1'
web_reg_save_param_ex(
"ParamName=CorrelationParameter_1",
"LB=userSession value=",
"RB=>\n<table border",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/nav.pl*",
LAST);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t3.inf",
"Mode=HTML",
LAST);
lr_think_time(13);
web_reg_find("Text={username}",LAST);
lr_start_transaction("login");
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=body",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t4.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={CorrelationParameter_1}", ENDITEM,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value=lisi", ENDITEM,
"Name=login.x", "Value=37", ENDITEM,
"Name=login.y", "Value=4", ENDITEM,
"Name=login", "Value=Login", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
LAST);
lr_end_transaction("login", LR_AUTO);
return 0;
}
10. http高级选项
录制请求头 :
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
11. Loadrunner Controller运行不了,提示cannot create Vusers
执行场景时显示: Loadrunner Controller cannot create Vusers.Ensure that your load generators are available and that your scripts are valid.
解决:在设置场景页面的第一个模块里有个属性列为Load Generators,点击后下面会显示有一个add,点击add,添加Name:localhost (一般为本机IP),点击OK就可以运行了
12. 关于解决LoadRunner中Controller里面Scenario菜单下的Rendezvous还是灰色,不能被选择
出现如下问题, Rendezvous还是灰色:
出现这个问题的原因是在录制脚本或自己编写脚本的时候,没有插入“集合点”(只有在对应的VU脚本中插入集合点之后,该按钮才能被选择)。
解决办法有两种:
1、录制脚本过程中插入集合点,这样在录制完成后会自动在代码中插入集合点。 2、利用函数lr_rendezvous("xx"),手动在代码中插入集合点;
集合点插入成功后,Remove之前的用户组,重新添加你修改过的用户组脚本,这时候你就看到Controller里面Scenario菜单下的Rendezvous变为可选
13. server setting
14. 专家模式
15. 修改配置,压力还是无法增大
END
微信扫一扫
关注该公众号