Vugen
录制的基本步骤
-
new
-
选择协议
-
选择录制选项
-
开始录制
Tools-->Regenerate script
该选项是用来根据录制信息,按照当前的录制选项来重新生成脚本的。
常用用途:
-
脚本恢复。
-
更改录制选项之后重新生成脚本。
Vugen的三个选项
Recording options:
录制选项,影响到的是LR录制、生成脚本。不同协议的录制选项不一样,脚本生成之后,录制选项就失效了
-
recording
-
General:Recording:指定LR生成脚本时所采用的的模式
-- HTML-based script:主请求模式,该模式下只会对主请求生成对应的脚本,其他所有的资源请求(子请求)会作为附加请求放在同一个请求中
特点:脚本简洁,脚本的特征是函数中字段 Mode=HTML,这个模式下请求的响应中包含资源子请求(如静态资源),且会自动加载,该模式下,可能会遗漏某些ajax的请求
HTML模式又有两种子模式HTML Advanced:
-
user action:用户行为模式,该模式下所生成的脚本之间会建立强制依赖,请求之间的依赖是通过上下文(context)来实现
特点:从第二个请求开始,请求的执行都是依赖于上一个请求的响应结果。 优点:对于业务中本身就存在的上下依赖关系,不需要进行关联操作即可成功。 缺点: 业务系统中的依赖往往并不是上下依赖。 生成的脚本强耦合,可编辑性几乎为0.
-
URLs:该模式下生成的脚本都是通过URL地址来运行的
优点:脚本的可编辑性强。 缺点:但凡系统中存在依赖,都需要手工进行关联处理。
-- URL-based script:URL模式/http模式,该模式下只会对所有的http请求生成对应的脚本,子请求也会生成请求脚本
特点:脚本臃肿,脚本中字段 Mode=HTTP,这个模式下只完成http请求,不会涉及到其他相关的资源子请求,该模式下,不会遗漏任何通过http协议的AJAX请求
-
从客户角度来说,建议使用HTML模式,这样给服务器带来的压力最真实。 从接口角度(服务器)来说,建议使用URL模式,这样就可以排除资源传输对结果的影响,测试到的就是最纯粹的业务接口的性能。
总结:建议大家使用HTML下基于URLs的模式为主,以URL模式为辅
手动写脚本:
新建一个空脚本,在Action{}中,右键-->insert-->new step-->custom request,也可以添加cookie和header web_add_cookie, web_add_header
手写的脚本需要添加一个参数 "Snapshot=xx.inf",方便在tree模式下回放时调试
-
HTTP properties--advanced
-
support charset:该选项影响的是生成脚本时是否对数据进行解码操作以及生成的脚本的编码选项(Convert from/to UTF-8)的默认值。
注意事项:
-
录制所生成的脚本中,是否存在乱码,其实本身并不会影响脚本的运行,但是对于之后的参数化和关联会造成一定的影响。
-
如果录制时勾选了Support charset选项,则LR在生成脚本时,会对所抓取到的编码数据进行解码操作,将之转变为本地语言所对应的编码并显示。并且会将脚本的编码选项(Convert from/to UTF-8)的默认值设置为1(YES)
-
如果录制时没有勾选了Support charset选项,则LR在生成脚本时,不会对所抓取到的编码数据进行解码操作,会直接使用本地语言去解读数据(UTF-8)并显示,并且会将脚本的编码选项(Convert from/to UTF-8)的默认值设置为0(NO)
-
LR中只对脚本中的乱码进行了处理,对其它的日志、镜像都没有做严格的编码处理
查看Convert from/to UTF-8的值:run-time settings-->preference-->options-->general-->Convert from/to UTF-8
-
Convert from/to UTF-8选项是LR中真正决定脚本中是否能够使用本地语言的编码的因素。
如果Convert from/to UTF-8的值为1(YES),则表示LR在发送和接收的过程中会自动对编码进行转换处理。(发送:脚本中的中文转为UTF-8;接收:响应中的UTF-8转为中文)。
如果Convert from/to UTF-8的值为0(NO),则表示LR在发送和接收的过程中不会自动对编码进行转换处理。
查看函数帮助文档 :选中函数后 F1,可查看函数帮助文档
lr_convert_string_encoding(),把soucerString 从 fromEncoding 转为 toEncoding,并存入一个变量 paramName,使用变量 {paramName}
//叫某段中文转为utf-8编码并设置为变量
lr_convert_string_encoding("中文测试",NULL,"utf-8","name");
lr_save_string(lr_eval_string("{name}"),"name");
Runtime settings
运行时设置,影响的是Vugen中运行、调试脚本。
-
Run Logic:该选项是用来设置LR脚本的真正的执行逻辑
-
LR的脚本是存放在一个一个独立的函数之中的。LR会将独立的函数添加在三个运行块中:Init、Run、End,这三个块是按顺序执行的:Init-->Run-->End。
-
在每一个虚拟用户的生命周期中,位于Init和End部分的脚本都只会执行一次,位于Run中的脚本可以执行多次,执行次数受到迭代次数(Number of iterations)or持续时间的影响
-
Number of iterations在 Run Logic中设置。在LR中,所谓迭代就是指位于Run部分的脚本被完整的执行一次。即Run一次就是迭代一次。
-
持续时间(Duration):是在场景(Controller)中设置的,优先级高于迭代次数
-
-
-
Pacing:该选项是用来设置两次迭代之间的间隔时间的,该选项也可以用来调节脚本对服务器造成的负载。不过一般来说,我们更多的是使用思考时间而不是该选项,因此通常该选项默认即可
-
Log:日志,不同的场景下,对于日志的需求是不一样的。
-
调试:一般来说,调试阶段,日志信息是越详细越好。
-
运行:一般来说,运行阶段,日志信息是仅记录错误即可
-
-
Think Time:思考时间选项,该选项是用来设置思考时间函数( lr_think_time())是否起效,如何起效。
-
As Record:完全使用脚本中设置的思考时间 t
-
Multiply ...:实际思考时间= t * Multiply值
-
random ...:t * min<=实际思考时间<=t *max
-
limit ...:全部脚本的思考时间限制在多少秒
-
在Vugen中,默认是忽略脚本中的思考时间函数的。
在性能测试领域,思考时间的存在对于脚本的功能实现是没有任何的影响的。
在Controller场景中,默认是启动脚本中的思考时间函数的
-
Miscellaneous:该选项中Multithreading选项是用来设置LR中的虚拟用户的实现模式。虚拟用户的实现模式有两种:
-
Run Vuser as a process:进程模式,一个虚拟用户就是一个进程。
-
Run Vuser as a thread:线程模式,一个虚拟用户就是一个线程
1、在LR中,不论是进程模式还是线程模式,虚拟用户所涉及到的进程都是mmdrv.exe的进程。 2、在LR的线程模式下,默认情况下,一个mmdrv.exe进程最多包含50个线程。多余的线程会自动启动另一个进程
3、线程模式下,一个用户组占有一个进程
线程模式VS进程模式: 线程模式能够节约资源的使用。 进程模式更真实的模拟用户的请求。 一般来说,从理论上来说,建议使用进程模式。从现实来说,使用线程模式更多
-
-
network--Speed Simulation:客户端带宽模拟。不建议设置 做性能测试,往往针对的是服务器端的性能,通常都建议或者要求在局域网环境下进行,排除网络带宽对测试结果的影响。 带宽模拟是针对IO密集型业务,客户端带宽不足的情况下的性能测试。
带宽模拟时需要注意带宽的单位和文件传输单位的转换:1byte=8bit
-
Browser Browser Emulation:浏览器模拟。 需要注意的就是每次迭代产生新的session和clear cache对测试结果的影响。
-
Simulcate a new user on each iteration:一旦勾选该选项,如果被测系统是通过session来记录状态的,则有可能导致第一次迭代成功,后续迭代失败的情况产生。
-
Clear chache on each iteration:每次迭代都清理缓存。该选项主要是针对HTML模式下的脚本有影响。每一次清理客户端缓存,对服务器造成的性能压力更大(IO),得到的测试结果会更差。是否勾选取决于应用本身的设置以及测试需求。
-
General options
常规选项,影响的LR的Vugen组件的执行,对于脚本没有影响。
-
Parameter Braces:该处可以看到当前协议的脚本中,参数调用的格式控制符,不建议修改。不同协议的默认的参数调用的格式控制符可能是不同的。
-
Correlation:该处设置的是回放关联的规则。