一、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.Recording Options
1)Recording
2)Network-Port Mapping
3)HTTP Properties-Advanced(选择UTF-8录制时候路过中文不会乱码)
2.Run-time Setting
1)Log
——————————————————————————————————————————————————————————————————————————————
四、脚本优化
优化方式:插入事务、插入集合点、设置思考时间、设置参数化、设置关联、设置检查点、插入注释。
脚本瘦身:
1.脚本录制完之后,过滤一遍,删除无关的代码请求,把业务逻辑捋顺。“web_add_cookie”这个函数可以把cookie信息记录下来,一般情况下情况下我们可以把它删除;(词语句在下2、3情况下都可以删掉,为无用语句)
2.如果单纯的想模拟操作,可以将同项目操作无关的语句全部删掉即可。(例如什么带有QQ啊什么的语句)
3.如果想模拟实际运行的所有加载项等东东,则需保留2中相关语句。
4.Web_url函数下的extrares属于静态的东西,一般情况下删除;(如果需要对整个系统做性能评估的话,extrares里的东西建议保存下来,只把无关的删除)
5.编译脚本,编译完成后回放脚本,查看日志,日志无报错现象,但数据没提交,则有可能需要做关联,需要查看业务数据的交互情况,查看每个与服务器有交互的业务数据;
五、回放显示:
设置位置:Tools---General Option,设置详情如下图:
六、参数化
1.参数化详细说明请参考如下网址:
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(虚拟用户逐一取参数值,每个虚拟用户唯一对应一个参数值)