一、安装配置
解决LoadRunner参数化最多读取100个值数据限制的问题.
修改.\Program Files\HP\LoadRunner\config\ vugen.ini中[ParamTable]
MaxVisibleLines=100Loadrunner11在win7+IE9|10|11不能正常录制脚本
(1)关闭杀毒软件或防火墙
(2)修改IE设置:打开“工具-internet选项-高级”取消“启用第三方浏览扩展”
二、脚本编写
LoadRunner录制脚本时为什么不弹出IE浏览器?
当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。
启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题
提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。录制Web脚本时,生成的脚本中存在乱码该如何解决?
录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。HTML-based script与URL-based script的脚本有什么区别?
使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。
通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?
由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。
进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。
检查执行结果时推荐使用web_reg_find方法。运行时的Pacing设置主要影响什么?
Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。
根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?
Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:serverreturned an incorrectly formatted SOAP response”。这时说明原因引起的?
造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。
解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。VuGen支持Netscape的客户证书吗?
不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的WebVuser脚本的计算机上都要重复执行前面的过程。VuGen会修改录制浏览器中的代理服务器设置吗?
会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。在LoadRunner脚本如何输出当前系统时间?
LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。
调用语句与返回值如下示例:
typedef long time_t;
Action()
{
time_t t;
lr_message(“Time in seconds since 1/1/70: %ld ”,time(&t));
lr_message(“System time and date: %s”,ctime(&t));
}
输出结果为:
Time in seconds since 1/1/70: 1185329968
System time and date:Wed Jul 25 10:19:28 2007
一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?
这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?
如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。
另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。
三、场景执行
在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。
进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:SystemCurrentControlSetControlSession ManagerSubSystems。
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%system32csrss.exe bjectDirectory=Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off MaxRequestThreads=16
SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。
(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。
通过对注册表的更改,系统将允许运行更多的线程,
因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。关于Error -27791: Error -27790: Error -27740:
错误如下:
Action.c(198): Error -27791: Server www.zcpx.cn has shut down the connection prematurely
Action.c(198): Error -27790: Failed to read data from server www.zcpx.cn: [10053] Software caused connection abort
Action.c(198): Error -27740: Overlapped transmission of request to www.zcpx.cn for URL
http://www.zcpx.cn/userEntry.do failed: WSA_IO_PENDING
解决办法:
在脚本的最前面加上web_set_sockets_option(“OVERLAPPED”,”0”);
Error -27796: Failed to connect to server
解决办法:
在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里,有如下两个键值:
TcpTimedWaitDelay
MaxUserPort
(1)这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。Error -27727: Step download timeout (120 seconds)
查阅相关信息
应用服务参数设置太大导致服务器的瓶颈
页面中图片太多
在程序处理表的时候检查字段太大多
解决方法:
Run-Time Setting ->Internet Protocol ->references ->Option -> Step download timeout(sec)改为32000.另外还有HTTP-request connect timeout和HTTP-request receive timeout出现以上问题时最大可设为1000.Error -27791: Server has shut down the connection prematurely
运行Controller时遇到这个error:
Action.c(7): Error -27791: Server “10.10.0.88” has shut down the connection prematurely
解决方案如下:
(1)应用服务器死掉。小用户时程序上的问题,程序上处理数据库的问题
(2)应用服务没有死。应用服务参数设置问题。例如:在许多客户端weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是weblogic中的server元素的acceptbacklog属性 值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%。
(3)数据库的连接。在应用服务的性能参数可能太小了,数据库启动的最大连接数(跟硬件的内存有关)
(4)有时关闭杀毒软件也会解决如上问题
Failed to connect to server “域名:80”: [10065] No Route to Host
解决:
这种错误信息有两种情况,一是交换机堵塞,一是服务器网络堵塞或者CPU无法响应(网卡中断处理不过来了)。TTP Status-Code=500 (Internal Server Error)
解决:
A. 这个问题,开发人员从程序和环境进行调优了。
B. 通过抓包发现有大量的sql语句重复执行,建议优化sql。
C. 优化JVM。机器配置:4G的内存,32个线程并发能力
-Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XXarallelGCThreads=20
HTTP Status-Code=504 (Gateway Time-out)
解决:
502 bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
504Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。Step download timeout (120 seconds) has expired when downloading non-resource(s)
解决:
首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。运行场景时提示“Step download timeout (120 seconds) has expired when downloading resource(s)”
vuser_init.c(12): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)(出现个别,可以忽略)
vuser_init.c(12): Error -27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the “Step Timeout caused by resources is a warning” Run-Time Setting to Yes/No to have this message as a warning/error, respectively
如果觉得下载一个页面超过2分钟不是错误的话,可以在Run-Time设置中选择Preferences->Options,修改Step download timeout(sec)的时间
或者把“Step timeout caused by resources is a warning”设置为Yes,这样下载资源超时也只是作为警告,不作为错误提示。
但是对于非资源的下载超时,用LoadRunner测试时,总会报下载超时的错误:
vuser_init.c(26): Error -27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the “Step Timeout caused by resources is a warning” Run-Time Setting to Yes/No to have this message as a warning/error, respectively
上面报的是超时的意思,不一定是代码的问题,可能是负载比较大,服务器的响应超过了120秒,就汇报这个错误,解决方法如下:
(1)修改run time setting中的请求超时时间,默认120,你改大一些,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数;
(2)设置run time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,勾选。
运行场景后,提示“Abnormal termination, caused by mdrv process termination”
解决:
(1)The Host machine ( Load generator) is running too many Vusers as a result of which it system resources are being maximized. ( i.e. Consistent over 90% CPU and Memory utilization). The mdrv process does not get enough resources to process the request as a result it fails
(2)If you have Custom C coding, there is a possibility of allocated memory not being freed or memory violation errors which can lead to ‘mdrv process termination’.
(3)Replay the script with think time.
(4)Turn off extended log when running the script in the controller.
(5)Do not use the controller itself as the loadgenerator. i.e. have a remote LoadGenerator.
(6)Introduce iteration pacing, if running more than one iteration each vuser.
(7)Open the file C:\WinNT\wlrun7.ini in a text editor, modify the entry from: AgentMaxThreadsPerDriver=50 to AgentMaxThreadsPerDriver=20 or 10
(8)Run Agent as process instead of service Launch command prompt and navigate to C:\Program Files\Mercury\Loadrunner\Launch_service\bin and run the command magentserive -remove. This will remove the agent. Now run the command magentproc -install This will install the agent as a process.LR .NET:This Vuser already started a transaction with the same name
场景执行过程中可能会出现如下错误:
情况描述:Error: Cannot start transaction “XXXXX”. This Vuser already started a transaction with the same name, and has not yet processed the corresponding lr_end_transaction statement.
问题分析:由于错误提示是 transaction ,所以主要看插入事物的脚本部分,根据提示可以断定,程序在进入 lr.start_transaction 后,在 end_transaction 前就异常了,所以并没有执行 end_transaction,就会报这个错误,这个分析可能一时难以想到,还有一种简单的办法,就是执行脚本,然后看 Replay Log,此时可以看到一个红色的异常,内容如下:
Error: Vuser started transaction “XXXXX”, but did not reached a corresponding end transaction statement. The transaction ended automatically with status ‘fail’.
解决方法:只要把事物的开始和结束放到 try/catch 的外面即可.LR .NET:场景执行过程中大量事务失败但无错误信息。
问题分析:由于场景执行过程中产生了重名事务,导致部分事务未结束前该事务又开始了。
解决方法:对于事务开始和结束时,将两函数中事务名进行参数化。如下所示:
lr.start_transaction(lr.eval_string(“{transaction_name}”));
lr.end_transaction(lr.eval_string(“{transaction_name}”), LR_AUTO);Error: Two Way Communication Error: Function two_way_comm_post_message / two_way_comm_post_message_ex failed.
Error: Service client with id=211 failed to post a message ,reason - communication error.
Error: Failed to deliver a p2p message from son to parent process, reason - communication error.
Error: Communication error: Cannot send the message since reached the shared memory buffer max size.
解决方法:\HP\LoadRunner\dat\channel_configure.dat
\HP\LoadRunner\launch_service\dat\channel_configure.dat
在这两个文件中的[general]部分下添加如下配置:
shared_memory_max_size=100 (修改共享内存为100MB,默认是50MB)重新启动Controller,问题解决。