cover_image

LoadRunner 学习笔记摘要

Asteria杨 youngish 2018年12月09日 11:04

概念

性能测试: 功能是否能做 ,性能是做的如何,怎么样?
并发 :同时访问一个功能 ,一个操作或一个服务器
响应时间 :快慢问题

  • 需求 : 响应时间不超过3s

  • 验证 :验证预期结果是否达到性能需求的要求

工作原理

Vugen生成脚本,由Controller将脚本分发到每台压力机上, 压力机模拟虚拟用户向服务器发送请求,服务器接收请求, 作出相应的响应,Controller监控整个过程服务器的指标, 最后生成报告发送给analysis

录制脚本过程 :

  1. 开始-->HP LR-->virtual user generator -->new

  2. 新建脚本选择网络协议

2.1如何选择协议

  • 通过抓包工具抓取

  • 查看性能需求文档

  • 查看接口文档

  • 询问开发

  • 凭经验-web-http

2.2 单协议脚本
2.3 多协议脚本

  1. 录制框选择

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

HTML-based script :

(1) weblink、websubmit_form(示范) 依赖上下文关系 ; 编写规则: web_link("访问首页","Text=LoadRunner",LAST);

(2) weburl、websubmit_data(示范) 不依赖上下文关系编写规则: web_url("访问首页","url=http://www.baidu.com",LAST);

URL-based script

抓取全部的http请求,适合基于非浏览器的脚本录制

图片

图片

LR脚本开发

图片


图片


图片

LR脚本增强

录制脚本参数化

图片

步骤:

1、首先确定脚本中需要参数化的对象/数据(变化的)
2、选中目标数据,右击选择 replace-with-a-parameter  

图片

3、填写参数名称,点击确定  

图片

4、右键再点击选择参数属性或按下ctrl+L(右上角的P)打开参数设置界面,增加或修改数据,可点击 editwith-notepad进行编辑,设置参数取值策略(默认)

图片

图片

图片

注意:参数化文件中的测试数据最后一行不能有空行 

5、迭代次数设置: vuser--runtimesetting--logic--50次

图片

总结 :

参数化核心 :1.参数 2.修改运行次数

检查点

图片

图片



  1. web_reg_find("Text=sai001",LAST);



  2. 注册检查点
    (1)打算要检查什么告诉脚本, 脚本先声明变量把要检查的东西放进去, 如果在下面的响应中出现就找到了, 找到的次数也会记录。
    (2)放在要检查的请求前面就



  3. 什么时候要加检查点


  • 验证业务逻辑
    登陆是否登陆上 200-登陆不成功状态响应码也200

  • 不加
    LR验证协议状态响应码如果是200就通过 200:只要有响应就是200

  • 登陆成功不成功,检查点区别出现

  • 不重要
    性能关心是吞吐量,只要吞吐量没有大变化,数据是否正确不太关心

实际操作 :

  1. 插入检查点函数 ;

    insert ->new step 插入检查点函数: web_reg_find("Text=xxx",LAST);

  2. 检查点参数化 ;

图片

总结 :

检查点核心 :  

1.检查点函数 web_reg_find("Text=xxx",LAST) ;
2.参数化
3.一定要放在 注册事件函数之前 {(web_find("Text=xxx",LAST) 可以在注册函数之后}

以上代码:

  1. Action()

  2. {


  3.    web_url("WebTours",

  4.        "URL=http://127.0.0.1:1080/WebTours/",

  5.        "TargetFrame=",

  6.        "Resource=0",

  7.        "RecContentType=text/html",

  8.        "Referer=",

  9.        "Mode=HTML",

  10.        LAST);


  11.    web_url("header.html",

  12.        "URL=http://127.0.0.1:1080/WebTours/header.html",

  13.        "TargetFrame=",

  14.        "Resource=0",

  15.        "RecContentType=text/html",

  16.        "Referer=http://127.0.0.1:1080/WebTours/",

  17.        "Mode=HTML",

  18.        LAST);


  19.    web_url("welcome.pl",

  20.        "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",

  21.        "TargetFrame=",

  22.        "Resource=0",

  23.        "RecContentType=text/html",

  24.        "Referer=http://127.0.0.1:1080/WebTours/",

  25.        "Snapshot=t6.inf",

  26.        "Mode=HTML",

  27.        LAST);


  28.    lr_think_time(7);


  29.    web_url("login.pl",

  30.        "URL=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",

  31.        "TargetFrame=body",

  32.        "Resource=0",

  33.        "RecContentType=text/html",

  34.        "Referer=http://127.0.0.1:1080/WebTours/home.html",

  35.        "Snapshot=t7.inf",

  36.        "Mode=HTML",

  37.        LAST);


  38.    lr_think_time(11);


  39.   // 添加检查点  因为用户名有10个,所以检查点也要进行参数化 ;每次迭代时更换一个用户名

  40.    web_reg_find("Text/DIG={username}",

  41.        LAST);

  42.    //用户名进行参数化

  43.    web_submit_data("login.pl_2",

  44.        "Action=http://127.0.0.1:1080/WebTours/login.pl",

  45.        "Method=POST",

  46.        "TargetFrame=info",

  47.        "RecContentType=text/html",

  48.        "Referer=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",

  49.        "Snapshot=t8.inf",

  50.        "Mode=HTML",

  51.        ITEMDATA,

  52.        "Name=username", "Value={username}", ENDITEM,

  53.        "Name=password", "Value=lisi", ENDITEM,

  54.        "Name=passwordConfirm", "Value=lisi", ENDITEM,

  55.        "Name=firstName", "Value=", ENDITEM,

  56.        "Name=lastName", "Value=", ENDITEM,

  57.        "Name=address1", "Value=", ENDITEM,

  58.        "Name=address2", "Value=", ENDITEM,

  59.        "Name=register.x", "Value=61", ENDITEM,

  60.        "Name=register.y", "Value=3", ENDITEM,

  61.        LAST);


  62.    return 0;

  63. }

事物

图片

为了记录响应时间 ;

图片

① 开始事物

lrstarttransaction("xxx_");

② 结束事物

//添加结束事物, 时间结尾值减去时间开始值,就是中间经历的响应时间

  1.    lr_login_transaction("login_",LR_AUTO);


③ 检查点

  1.    web_reg_find("Text=lisi", LAST);


注意事项

不要把开始时间放在思考时间和检查点外面, 要放在具体的action之间

思考时间

图片

函数名 : lr_think_time(5)
-模拟真实
-等待加载
-不加-测试最大压力

关联 (session)

图片

图片

Tree视图 :

图片

图片

图片


图片


图片


图片


背后做了三件事:

  1. 注册 session函数

  2. Usersession 参数参数化

  3. 查找session函数放置的位置很重要(和检查点有点类似)

场景设计(前脚本要满足的条件)

图片

  1. 脚本回放没问题

  2. 加参数化

  3. 可以加检查点

检查点的参数化

  4. 加事务


    • 开始

    • 结束


  5. 如果需要关联加关联


注册没有关联 ,

登陆脚本有关联,

订票脚本没有session .

LR配置及选项

run-time settings

(一):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 : 如果页面上面有 jsajax,等,回放不成功,可能需要选择这个录制。


general option常规选项

(1)录制选项选择

图片

Html : WEB基本选择这个选项 , 包含明确的URL脚本---走底层协议,请求

URL :

如果页面上面有js,ajax,等,回放不成功,可能需要选择这个录制。

(2)解决乱码问题

图片

实践

任务:录制登陆脚本,参数化,关联,检查点,及检查点的参数化,添加事务开始与结束,进行场景设计:找到本机并发登陆最大的临界点,场景策略中日志策略为只有错误才打日志,思考时间策略是忽略思考时间,执行的策略,先是10人,20,。。。50人,70人,等。将最高一次并发保存场景结果并生成分析报告。

 

场景计划策略,每10秒中上去5个人,持续5分钟,每10下来10个人。

生成报告 13张,包括window的资源加上。

图片

图片

图片


LR场景设计监控

设计

进入方式 ,场景分类;

图片

设计场景

(0) 场景组脚本

图片


(1) 设置用户负载方式

图片

图片

(2) 基本练习

图片

(3) 如何实现这两张图的效果?

图片

场景设计策略

图片

图片

SLA(服务水平协议)

图片

压力机

图片

图片

场景时运行时设置策略

图片

截图 :

图片

异常情况解决

图片

原理扩展

图片

运行

(1) 状态

图片

图片


(2) 监控界面显示的表

图片

图片

图片

运行结果的调整和分析

信息

图片

图片

分析与调整

图片


超时-第一步调优,放开超时时间

图片


分析报告

常用的13项指标截图

图片

图片

.性能指标及原理

响应时间

图片

图片

图片

吞吐量

图片

资源利用率

图片

总结:

图片


. 每个图表分析

  1. 概要报告       

图片

图片

图片

  1. 要加图的顺序和个数  

图片

  1. running vusers

图片

  1. 错误图

    图片


  1. TPS -重要的性能指标之一图片

图片

图片

  1. Hits

图片

  1. connection

图片

  1. 硬件资源

图片

  1. web

图片

图片


图片

图片

图片

图片

. 分析与定位过程

  1. 按顺序看图将每个图中有问题的部分标记下来

  2. 我们从图中的标记的得到一些信息

图片

图片

submit分析报告

图片

图片


分析原则

图片

webTours项目的性能测试过程

图片

图片

常见问题 : 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选项---高级,把启用第三方浏览器扩展去掉,保存。

 

方法二:

    右击我的电脑,选择属性,进入高级选项卡页面,点性能处的设置按钮,选择数据执行保持,添加两个程序:IEvugen.exe.

   1)添加IE。点添加按钮,选择IE的安装路径。如我的是C:\Program Files\Internet Explorer\InternetExplore  (浏览器看个人喜好选择就行)

   2)添加vugen.exe。点添加按钮,选择vugen.exe的安装路径。如我的是

D:\Program Files\HP\LoadRunner\bin\vugen.exe 

 8. 注册函数

  1. Action()

  2. {


  3.    web_url("WebTours",

  4.        "URL=http://127.0.0.1:1080/WebTours/",

  5.        "TargetFrame=",

  6.        "Resource=0",

  7.        "RecContentType=text/html",

  8.        "Referer=",

  9.        "Mode=HTML",

  10.        LAST);


  11.    web_url("header.html",

  12.        "URL=http://127.0.0.1:1080/WebTours/header.html",

  13.        "TargetFrame=",

  14.        "Resource=0",

  15.        "RecContentType=text/html",

  16.        "Referer=http://127.0.0.1:1080/WebTours/",

  17.        "Mode=HTML",

  18.        LAST);


  19.    web_url("welcome.pl",

  20.        "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",

  21.        "TargetFrame=",

  22.        "Resource=0",

  23.        "RecContentType=text/html",

  24.        "Referer=http://127.0.0.1:1080/WebTours/",

  25.        "Snapshot=t6.inf",

  26.        "Mode=HTML",

  27.        LAST);


  28.    lr_think_time(7);


  29.    web_url("login.pl",

  30.        "URL=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",

  31.        "TargetFrame=body",

  32.        "Resource=0",

  33.        "RecContentType=text/html",

  34.        "Referer=http://127.0.0.1:1080/WebTours/home.html",

  35.        "Snapshot=t7.inf",

  36.        "Mode=HTML",

  37.        LAST);


  38.    lr_think_time(11);


  39.   // 添加检查点  因为用户名有10个,所以检查点也要进行参数化 ;每次迭代时更换一个用户名

  40.    web_reg_find("Text/DIG={username}",

  41.        LAST);

  42.    //用户名进行参数化

  43.    web_submit_data("login.pl_2",

  44.        "Action=http://127.0.0.1:1080/WebTours/login.pl",

  45.        "Method=POST",

  46.        "TargetFrame=info",

  47.        "RecContentType=text/html",

  48.        "Referer=http://127.0.0.1:1080/WebTours/login.pl?username=&password=&getInfo=true",

  49.        "Snapshot=t8.inf",

  50.        "Mode=HTML",

  51.        ITEMDATA,

  52.        "Name=username", "Value={username}", ENDITEM,

  53.        "Name=password", "Value=lisi", ENDITEM,

  54.        "Name=passwordConfirm", "Value=lisi", ENDITEM,

  55.        "Name=firstName", "Value=", ENDITEM,

  56.        "Name=lastName", "Value=", ENDITEM,

  57.        "Name=address1", "Value=", ENDITEM,

  58.        "Name=address2", "Value=", ENDITEM,

  59.        "Name=register.x", "Value=61", ENDITEM,

  60.        "Name=register.y", "Value=3", ENDITEM,

  61.        LAST);






  62.    return 0;

  63. }

9. 登录函数

  1. Action()

  2. {


  3.    web_url("WebTours",

  4.        "URL=http://127.0.0.1:1080/WebTours/",

  5.        "TargetFrame=",

  6.        "Resource=0",

  7.        "RecContentType=text/html",

  8.        "Referer=",

  9.        "Mode=HTML",

  10.        LAST);


  11.    web_url("header.html",

  12.        "URL=http://127.0.0.1:1080/WebTours/header.html",

  13.        "TargetFrame=",

  14.        "Resource=0",

  15.        "RecContentType=text/html",

  16.        "Referer=http://127.0.0.1:1080/WebTours/",

  17.        "Mode=HTML",

  18.        LAST);


  19. //Correlation comment - Do not change!Original value='125091.184609154ztDtDHHpiAiDDDDDDizAzpczzif' Name ='CorrelationParameter_1'


  20.    web_reg_save_param_ex(

  21.        "ParamName=CorrelationParameter_1",

  22.        "LB=userSession value=",

  23.        "RB=>\n<table border",

  24.        SEARCH_FILTERS,

  25.        "Scope=Body",

  26.        "RequestUrl=*/nav.pl*",

  27.        LAST);


  28.    web_url("welcome.pl",

  29.        "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",

  30.        "TargetFrame=",

  31.        "Resource=0",

  32.        "RecContentType=text/html",

  33.        "Referer=http://127.0.0.1:1080/WebTours/",

  34.        "Snapshot=t3.inf",

  35.        "Mode=HTML",

  36.        LAST);




  37.    lr_think_time(13);


  38.    web_reg_find("Text={username}",LAST);


  39.    lr_start_transaction("login");


  40.    web_submit_data("login.pl",

  41.        "Action=http://127.0.0.1:1080/WebTours/login.pl",

  42.        "Method=POST",

  43.        "TargetFrame=body",

  44.        "RecContentType=text/html",

  45.        "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",

  46.        "Snapshot=t4.inf",

  47.        "Mode=HTML",

  48.        ITEMDATA,

  49.        "Name=userSession", "Value={CorrelationParameter_1}", ENDITEM,

  50.        "Name=username", "Value={username}", ENDITEM,

  51.        "Name=password", "Value=lisi", ENDITEM,

  52.        "Name=login.x", "Value=37", ENDITEM,

  53.        "Name=login.y", "Value=4", ENDITEM,

  54.        "Name=login", "Value=Login", ENDITEM,

  55.        "Name=JSFormSubmit", "Value=off", ENDITEM,

  56.        LAST);


  57.    lr_end_transaction("login", LR_AUTO);


  58. return 0;

  59. }


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 


图片

图片

图片

微信扫一扫
关注该公众号

继续滑动看下一个
youngish
向上滑动看下一个