A.5.4 Think Time
Think Time是一种等待时间的方式,由于VuGen回放脚本是全速运行的,而真正用户的操作并不会如此迅速,所以需要通过添加等待时间的方式,在脚本的运行中模拟用户的等待操作。
实现这个操作需要用到lr_think_time()函数。在括号内写入对应的时间即可完成等待的操作,注意格式是秒,也就是说lr_think_time(10)就是指脚本运行到这里会等待10秒。当录制脚本后,就可以经常看到系统自动添加的lr_think_time()函数。在默认情况下,VuGen中的lr_think_time(10)是不会执行的,因为在run-time setting中默认忽略了该函数,如图A.67所示。
图A.67 Think Time设置
在Controller中,该选项默认变为Replay think time,可以设置等待时间的倍数关系,也可以设置等待时间的随机范围。
一般think time时间设置为多少好呢?通常的做法是在录制时按照普通用户的方式进行操作,得到常见用户的响应时间。例如在注册时正常输入注册信息,那么录制后的脚本在进入注册页面和提交注册请求之间就会自动生成think time。如果对录制出来的时间存在疑问,一般推荐把这个时间设置得小一点,这样性能测试对服务器的负载大,得到的结果比较悲观,便于评估系统在超出需求情况下的处理能力。
A.5.5 Additional attributes
这里提供了自定义参数的功能,可以在这里先输入一些常用的参数名及对应的值,类似于常量,通过lr_get_attrib_string()函数来获取这些参数名对应的值。
例如,我们在这里添加一个名为test的参数,其对应的值为123456,如图A.68所示。
图A.68 Additional attributes设置
然后编写下面的脚本就可以取得该值:
lr_error_message(lr_get_attrib_string( "test" ));
这里介绍一下lr_error_message()函数,该函数的作用与lr_output_message()有些类似,都可以将函数中的字符串输出到日志,但是lr_error_message()函数会产生错误信息,这个错误会在后面影响错误计数器(尽量避免使用)。
如何在命令行模式下运行脚本呢?我们可以通过命令行来启动mdrv.exe运行脚本,例如,HP\LoadRunner\bin>mdrv.exe -usr g:\temp\pam\pam.usr -out g:\temp\pam -test 7654321。
Mdrv.exe是运行脚本的程序,其中-usr 后的内容是运行脚本的文件名及对应地址,即g:\temp\pam\pam.usr;-out后是脚本运行结果存放的地址,即g:\temp\pam;-test是参数名;7654321是前面参数对应的参数值。然后设置运行脚本的内容为:
Action()
{
lr_error_message(lr_get_attrib_string( "test" ));
return 0;
}
通过命令方式运行后,查看output.txt日志文件,即可发现命令后的输入参数被脚本正确读出。通过这种方式可以让脚本更加智能化,例如在进行性能测试时,最麻烦的就是服务器地址的变更带来大量函数的变更,如果把服务器地址做成一个参数,那么只需要在执行的时候输入最新的服务器地址即可实现脚本的正常运行。
A.5.6 Miscellaneous
Miscellaneous提供了一些在Controller中运行脚本的设置,如图A.69所示。
图A.69 Miscellaneous设置
这里提供了三大块功能。
1.Error Handling(错误处理)
在VuGen中,脚本中某个函数出错会导致整个脚本的停止运行,但是在场景中会继续运行,其原因就在于Continue on error选项。而Generate snapshot on error提供了错误截图的支持。在负载过程中建议不要同时打开Continue on error和Generate snapshot on error支持,这样会大幅降低负载效率。Fail open transactions on lr_error_message是指当事务中出现lr_error_message函数时,将会设置该函数所在的事务状态为Fail,事务的相关概念可参考第A.9节。
2.Multithreading(负载进程与线程方式设置)
进程就是指在场景中使用mmdrv.exe的进程方式来模拟虚拟用户,每一个虚拟用户都会使用一个mmdrv.exe进程。而线程模式是指所有的虚拟用户都会使用mmdrv.exe下的线程来进行脚本运行。在进程与线程的选择中,线程模拟用户对负载生成的资源消耗较小,但有些时候会出现负载错误;进程比较稳定,但资源开销较大。
3.Automatic Transactions(自动化事务)
事务是用来获得某一行为所消耗时间的函数。在LoadRunner 11版本中该选项默认不选,而在以前版本会默认将每个Action设置为一个事务。由于Action是一个行为的组合而不是一个行为,对于新手来说往往会错误地理解Action时间导致对性能测试结果中的响应时间产生疑惑(事务的相关概念将在第A.9节进行介绍)。
A.5.7 Speed Simulation
提供了带宽模拟的选项,在默认情况下,脚本是以最大带宽来进行访问的,作为一个局域网,下载图片甚至视频都会十分迅速。如果设置了带宽限制,那么得到的响应时间就会更接近于真实的用户感受。
例如,将带宽设置为128Kb/s,再次运行脚本,会明显感觉到脚本运行的速度比以前要慢了很多。
A.5.8 Browser Emulation
VuGen可以实现脚本的回放,关键在于Browser Emulation模拟了整个HTTP头中的user-agent信息,如图A.70所示。从而让服务器错误地认为是一个个"真实"的客户端对服务器发出了请求。
图A.70 浏览器模拟设置
通过Change User-Agent的属性,可以将脚本模拟成各种浏览器,用来做浏览器兼容性测试再合适不过了。在这里不但能设置浏览器模拟的类型,还能设置是否需要模拟Cache的处理方法,从而实现第一次访问较慢,下一次访问读取Cache较快的真实情况。当在一个脚本内执行两个相同的请求时可以在日志中看到,后一个请求会由于Cache机制不下载对应的非资源文件,从而比前一个请求更快完成(服务器上也有类似的Cache机制)。
例如,我们可以在脚本中编写两个相同的请求,当执行脚本后我们可以在日志中看到系统提示Resource "XXX" is in the cache already and will not be downloaded again,说明该请求已经被Cache而不会被下载,整个请求的Body字节变小。
在该设置对话框中,Simulate a new user on each iteration这个选项比较特殊,在前面说过iteration的概念。当打开这个选项后,VuGen会在每次迭代之前清除所有的前后文内容,来模拟一个新用户进行本次迭代的操作,web_cleanup_cookies函数可以实现相同的效果。
Clear cache on each iteration用来在每次迭代中清除对应的Cache,用来模拟新用户第一次访问的效果。如果需要手工清除Cache,避免后面请求被Cache时可以使用web_cache_ cleanup函数。
打开这个选项可能会导致脚本的前后文丢失而回放失败。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。