Loadrunner VuGen实战---基本组成、录制流程、协议、脚本优化、参数化(三)
一、3大基本组件:VuGen、Controller、Analysis
1.VuGen:录制、编写脚本。
2.Controller:性能测试场景设计以及监控的地方。
3.Analysis:生成图表报告的地方。
一、生成测试脚本:
1. 录制前注意事项
2. 录制脚本
3. 优化脚本
4. 增强脚本
5.调试脚本
二、深入理解协议选择
1.什么是协议?
协议是数据包再交换、通信时要按照统一的约定,这样双方才能识别。(注:协议详细说明请参考随笔“LoadRunner 技巧之协议分析(五)”)
2. 要想正确的选择LOADRUNNER的脚本协议,首先要从LOADRNNER的工作原理上深入理解协议的作用和意义。LOADRUNER启动后,在任务栏上会有一个LOADRNNER AGENT PROCESS的进程,这个进程的一项重要的工作就是监视各种协议的客户端和服务 器端的通信。只要是能够支持的协议,LOADRUNNER在录制的过程中就可以通过脚本语言将通信过程录制下来。所以只有明确了被测软件的通信过程和所使用的协议,LOADRUNNER才能正确的录制脚本。对于常见的应用软件,我们可以根据被测应用是B/S结构 还是C/S结构来选择协议;
1)对于B/S结构,可以选择WEB(HTTP/HTTML)协议;
2)对于C/S结构,可以根据后端数据库的类型来选择,如SYBASECTLIB协议用于测试后台数据库为SYBASE的应用,MS SQL SERVER协议用于测试后台数据库为SQL SERVER的应用;
3)对于没有数据库的WINDOWS应用,可以选择WINDOWS SOCKETS这个底层的协议;
4)这里需要说明的是,无论使用哪种协议,LOADRUNNER的测试流程都基本是一样的,只有在设定细节上有所不同,测试人员只要对被测应用的技术架构熟悉了,就能够成功完成脚本的录制。
三、录制脚本
1.在VIRTUAL USER GENERATOR主窗口单击START RECORD按钮,系统就开始自动录制脚本。
2.理解脚本的三个部分:
LOADRUNNER 将测试脚本分为3个部分,VUSER_INIT,VUSER_END和ACTION,其中VUSER_INIT和VUSER_END一般用于存放应用程序初始化的脚本和注销关闭的脚本,在重复执行的时候,这两部分的内容只执行一次.而ACTION部分用于存放实际的操作脚本, 这部分脚本可以多次执行,测试人员还可以根据需要创建多个ACTION 脚本,但不能创建VUSER_INIT和VUSER_END.
3.熟悉录制脚本工具栏: 4.在录制的过程中屏幕上有一个悬浮的工具栏,这是控制脚本录制的工具栏,是脚本录制过程中测试人员和VUGEN交互的主要平台,每个可用的按钮都可以执行相应的操作;
查看脚本:
1)SCRIPT VIEW:查看全部的脚本;
2)TREE VIEW:查看从每个URL获取来的页面;
四、脚本优化
优化方式:插入事务、插入集合点、设置思考时间、设置参数化、设置关联、设置检查点、插入注释。
脚本瘦身:
1.脚本录制完之后,过滤一遍,删除无关的代码请求,把业务逻辑捋顺。“web_add_cookie”这个函数可以把cookie信息记录下来,一般情况下情况下我们可以把它删除;(词语句在下2、3情况下都可以删掉,为无用语句)
2.如果单纯的想模拟操作,可以将同项目操作无关的语句全部删掉即可。(例如什么带有QQ啊什么的语句)
3.如果想模拟实际运行的所有加载项等东东,则需保留2中相关语句。
4.Web_url函数下的extrares属于静态的东西,一般情况下删除;(如果需要对整个系统做性能评估的话,extrares里的东西建议保存下来,只把无关的删除)
5.编译脚本,编译完成后回放脚本,查看日志,日志无报错现象,但数据没提交,则有可能需要做关联,需要查看业务数据的交互情况,查看每个与服务器有交互的业务数据;
五、回放显示:
设置位置:Tools---General Option,设置详情如下图:
六、参数化
1.参数化详细说明请参考如下网址:http://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html
2.下面着重说一下数据分配与更新方式
脚本设置完参数化,脚本运行的每一遍所取的参数化的值都不一样,那么这个值按照个什么情况来取呢?会有很多种方式
Select next row【选择下一行】:

顺序(Sequential):按照参数化的数据顺序,一个一个的来取。
随机(Random):参数化中的数据,每次随机的从中抽取数据。
唯一(Unique):为每个虚拟用户分配一条唯一的数据
Update value on【更新时的值】:

每次迭代(Each iteration) :每次迭代时取新的值,假如50个用户都取第一条数据,称为一次迭代;完了50个用户都取第二条数据,后面以此类推。
每次出现(Each occurrence):每次参数时取新的值,这里强调前后两次取值不能相同。
只取一次(once) :参数化中的数据,一条数据只能被抽取一次。(如果数据轮次完,脚本还在运行将会报错)
上面两个选项都有三种情况,如果将他们进行组合,将产生九种取值方式。
|
Select Next Row 【选择下一行】 |
Update Value On 【更新时的值】 |
Replay Result 【结果】 |
|
顺序(Sequential) |
每次迭代(Each iteration) |
结果:分别将15条数据写入数据表中 功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取 如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条 |
|
顺序(Sequential) |
每次出现(Each occurrence) |
结果:分别将15条数据写入数据表中 功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取 如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条 |
|
顺序(Sequential) |
只取一次(once) |
结果:表中写入15条一模一样的数据。 功能说明:每次迭代都取参数化文件中第一行的数据。 |
|
随机(Random) |
每次迭代(Each iteration) |
结果:表中写入15条数据,但可能有重复数据出现 功能说明:每次从参数化文件中随机选择一行数据进行赋值 |
|
随机(Random) |
每次出现(Each occurrence) |
结果:表中写入15条数据,但可能有重复数据出现 功能说明:每次从参数化文件中随机选择一行数据进行赋值 |
|
随机(Random) |
只取一次(once) |
结果:表中写入15条相同数据 功能说明:第一次迭代时随机从参数化文件中取一行数据,后面每次迭代都用第一次迭代的数据。 |
|
唯一(Unique) |
每次迭代(Each iteration) 自动分配块大小 |
结果:分别将15条数据写入数据表中 功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。 注:如果设置迭代次数为16次。结果:在执行第16次迭代时会抛异常,异常日志可在LoadRunner的回放日志(replayLog)中看到。 |
|
唯一(Unique) |
每次出现(Each occurrence) 步长为1 |
结果:分别将15条数据写入数据表中 功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。 注:如果设置迭代次数为16次,而参数化文件中只有15条数据,明显数据不够。此时可以设置“when out of values”属性来判断当数据不够时的处理方式 Abort Vuser:中断虚拟用户 Countinue in a cylic manage:循环取参数化文件中的值,即:当参数化文件中的值取完后又从参数化文件的第一行开始取值。 Countinue with last value:继续用最后一条数据 |
|
唯一(Unique) |
只取一次(once) |
结果:表中写入15条相同数据 功能说明:每次都取参数文件中的第一条数据进行赋值 |
Ps:在经历过的阿里云考试模块压力测试中我选用的参数化策略为:Uniqe+Once(虚拟用户逐一取参数值,每个虚拟用户唯一对应一个参数值)
Loadrunner VuGen实战---基本组成、录制流程、协议、脚本优化、参数化(三)的更多相关文章
- LoadRunner录制HTTPS协议脚本
学习LoadRunner录制HTTPS协议脚本,其实是一个意外的收获.当我拿到要测试的URL时,我像以前的步骤一样录制脚本,但是录制结束后,发现并没有生成脚本,开始以为是LoadRunner的原因,我 ...
- Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
脚本优化-参数化之关联MySQL数据库获取数据 by:授客 QQ:1033553122 测试环境: Loadrunner 11 Win7 64位 实操: 1. 安装MySQL ODBC驱动程序 O ...
- loadrunner 脚本优化-参数化之Parameter List参数同行取值
脚本优化-参数化之Parameter List参数同行取值 by:授客 QQ:1033553122 select next row 记录选择方式 Same line as,这个选项只有当参数多余一个时 ...
- loadrunner 脚本优化-参数化之Parameter List参数取值
脚本优化-参数化之Parameter List参数取值 by:授客 QQ:1033553122 参数取值选项 Select next row Update value on 以上两个选项是改变参数化取 ...
- loadrunner 脚本优化-参数化方法
脚本优化-参数化方法 by:授客 QQ:1033553122 方法一 1.确定需要参数化的内容 2.选中需要参数化的内容 3.右键选中的内容->Replace with a Parameter- ...
- 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题
LoadRunner录制脚本时,遇到高版本的IE.FireFox,或者Chrome浏览器,会出现无法录制脚本的问题,下面就来讲一下如何利用LR自带的wplus_init_wsock.exe插件进行脚本 ...
- loadrunner之WebServices协议脚本编写(三种请求模式)
以天气预报网站为例:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 一.web_service_call模式 步骤如下 ...
- loadrunner 脚本优化-参数化之场景中的参数化取值
脚本优化-场景中的参数化取值 by:授客 QQ:1033553122 Action() { lr_eval_string("{NewParam}"); lr_eval_stri ...
- loadrunner 录制TCP协议脚本操作
测试TCP协议的项目,涉及到登陆.发送实时数据.指令.登出等,直接写报文工作量太大,所以需要录制报文. 操作方法如下: 1.启动服务端程序 2.使用winsocket协议 3.选择应用程序 4.录制选 ...
随机推荐
- 不创建类将json数据转换
一般,取到json数据之后,都会将json数据转换为对象,通过属性取得里面的属性值,这样做可以很好地利用vs的智能提示,让开发更轻松,但是代价就是,你需要手动的创建json数据相对应的类. 也有其他方 ...
- [ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描
拿到了icpc北京站的参赛名额 感谢亮哥~ 虽然是地狱之战 但也要全力以赴! 题意: 有一片沙漠 n片绿洲 让你用一条线分成两部分 左≥右 而且分割线要尽量靠右 问线的位置 思路: 网上说可以二分 没 ...
- 关于jquery选择器中:first和:first-child和:first-of-type的区别及:nth-child()和:nth-of-type()的区别
:first:选择第一个出现符合的元素 :first-child:选择限制条件中的第一个元素,并且必须和冒号前面的标签一致 :first-of-type:选择所有限制条件下的第一个冒号前面的标签元素, ...
- NOIP2013-普及组复赛-第一题-计数问题
题目描述 Description 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到 11 中,即在 1.2.3.4.5.6.7.8.9.10.11 ...
- iOS 数组字典操作
iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash.当然可以通过自定义dictionary 和array重载增删改查的方法来 ...
- IE6下a标签失效(背景穿透)
background:fixed url(about:blank);有时候做感应区域的时候在ie6下不给背景就会感应不到,比如说当鼠标移到图片的左半边部分,鼠标手势变成向左的箭 头,比如说有些时候a标 ...
- url 取出文件扩展名
/**url 取出文件扩展名 *///方法一function getExt1($url) { $arr = parse_url($url); $file = basename($arr[' ...
- 一个初学者的辛酸路程-Python基础-3
前言 不要整天沉迷于学习-. 字典 一.我想跟你聊聊字典 1.为何要有字典? 大家有没有想过为什么要有字典?有列表不就可以了吗? 也许大家会这么认为,我给大家举个例子,大家就明白了. 比如说,我通讯录 ...
- span设置宽和高当没有内容的时候也可以撑开
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#用Zlib压缩或解压缩字节数组
/// <summary> /// 复制流 /// </summary> /// <param name="input">原始流</par ...