在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。
需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。
1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。
错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。
错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。
解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。
错误现象 2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do
错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。
如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。
解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。
如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。
最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocolreferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。
2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。
错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。
错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。
解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。
3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,
会出现请求无法找到的现象,而导致脚本运行停止。
错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]
Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"
这时在tree view中看不到此组件的相关URL。
错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。
解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。
5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。
错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。
错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。
解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。
6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。
错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。
错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:
如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,所以才会有此错误提示。
解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。
会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。
错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。
错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。
解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。
错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。
错误分析:服务器碰到了意外情况,使其无法继续回应请求。
解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。
4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,
7. 正在开始迭代 1。
警告 -27077: “每次迭代模拟一个新用户”运行时设置为“开”时,“vuser_init”节将包含 Web 函数。这可能会产生具有多次迭代的不可预测结果 [MsgId: MWAR-27077]
正在开始操作 Action。
解决办法:F4运行时设置,浏览器仿真- 每次迭代模拟一个新用户,不要选这个。
8.
是因为在开始录制--》选项--》高级不能同时选择支持字符集和生成web_reg_find函数
9. 太奇怪了,我选 的HTTP/WEB录制,IE弹不出来?
启动IE,进入Internet选线,切到高级,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可。通常安装Firfox等浏览器后,都会勾选这个选项,导致不能正常录制。因此建议LoadRunner的相关主机上保持一个干净的测试环境
10. web_url("lnr_31",
"URL=http://192.168.0.112:8181/XTBG/czrk/lnr/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.0.112:8181/XTBG/czrk/lnr/list.jsp?checkID=&searchinfo=+and+a.xm+like+%5Bquo%5D%5Bper%5D%CD%F5%5Bper%5D%5Bquo%5D&deptXID=51&isSearch=true",
"Snapshot=t43.inf",
"Mode=HTML",
LAST);
这里面的Snapshot=xxx.inf 意思是对这个页面进行快照(可以看下LR里的录制快照,有页面显示的代码里都有这一段。。)
11. vuser_init.c(12): Error -27796: Failed to connect to server "192.168.3.8:9008": [10060] Connection timed out
可能是服务器连接超时了
12. Action.c(12): Error -27791: Server "192.168.3.8" has shut down the connection prematurely
解决办法:在场景里面到是可以将120S超时的设置改大,这样场景就可以通过而不报ERROR错误啦!
13. Error -27492: "HttpSendRequest" failed, Windows error code=12017 (cannot connect) and retry limit (0) exceeded for URL="https://HOSTNAME:6634/services/Imaging
解决方案:
Run-Time Settings -> Preferences -> Advanced. 确定此选项未被选中:"WinInet replay instead of Sockets (Windows only)" 。
14. Action.c(4): 错误: C interpreter run time error: Action.c (4): Error -- Unresolved symbol : LrsCreateSocket.
解决方案:
协议选择错误,新建单协议脚本时,请选择 Windows Sockets,新建多协议脚本时,添加上Windows Sockets。
15. 中文:
16/06/2008 15:23:55 错误: 通信错误: 绑定套接字失败。此计算机上的某进程已绑定到同一地址。 [MsgId: MERR-10344]
16/06/2008 15:23:55 错误: 通信错误: 为 HTTP 通道服务器创建 TCP 服务器失败。 [MsgId: MERR-10344]
16/06/2008 15:23:55 错误: 双向通信错误: 函数 two_way_comm_create_acceptor 失败。 [MsgId: MERR-60999]
16/06/2008 15:23:55 警告: 创建“router”服务器失败。 [MsgId: MWAR-29974]
English:
16/06/2008 15:19:59 Error: Communication error: Failed to bind socket. A process on the machine is already bound to the same address. [MsgId: MERR-10344]
16/06/2008 15:19:59 Error: Communication error: Failed to create a TCP server for the HTTP channel's server. [MsgId: MERR-10344]
16/06/2008 15:19:59 Error: Two Way Communication Error: Function two_way_comm_create_acceptor failed. [MsgId: MERR-60999]
16/06/2008 15:19:59 Warning: Failed to create "router" server. [MsgId: MWAR-29974]
解决方案:
检查50500、54345、5001、5002、5003、443端口是否被其它进程占用!
loadrunner错误代码解释:
Error -27727: Step download timeout (120 seconds)
最近测试时总出现以下提示:Error -27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the "Resource Page Timeout is a Warning" Run-Time Setting to Yes/No to have this message as a warning/error, respectively
查阅相关信息说:
•A、应用服务参数设置太大导致服务器的瓶颈
•B、页面中图片太多
•C、在程序处理表的时候检查字段太大多
Error -27728: Step download timeout (120 seconds)的解决方法
一个网友问了我一个问题如下:
loadruner报错:Error -27728: Step download timeout (120 seconds)如何解决
语法检查通过,但是在并发执行一个查询时候报错Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s),请问有啥子解决方法,我使用web_set_timeout,好象不起作用,直接在option中设置timeout时间为600,(单位应该是秒吧)还是没有起作用,结果都还是提示(120seconds),说明还是以120秒来判断的;使用lrs_set_recv_timeout,语法检查不过,说明库函数里面没有这个函数。
尝试步骤:
设置超时时间到600秒,回放还是出错。
后来我设置了runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。
kernzhang解释如下(这里谢谢kernzhang,欢迎访问他的论坛:http://www.kernzhang.com):
这个问题很有意思!呵呵!首先LR是通过Microsoft WinInet DLL去录制web协议的!但是在Control运行的时候它默认通过socket去模拟请求,因为这些可以真实的模拟带宽,而采用Microsoft WinInet DLL通过这个DLL去访问网卡方式去模拟带宽,使得模拟不是很精确!而且也不支持unix的应用,但是使用这个确实有时无法处理winnet Dll的一些请求,我认为是它的一些BUG,比如说:回放时它会检查Content-Length,但是网页支持receive more data时,这时socket模拟会一直等待直到timeout!
先说了一些优缺点,最后回到这个问题!这个问题分两个方面分析:
第一:你要明白web_set_timeout()这个函数的适用范围!比如说一个web_submit_data()中实际涵盖了10个对Server端的请求,这个函数是针对10个请求的总和时间的!(别犯低级错误,timeout分了connect,receive以及download三个部分:) )
第二:就是我解释的上面的一些BUG问题!
WinInet dll在新版本中处理请求时可以异步的,就是不再是那种连接等待然后超时模式!但是LR用的socket是同步请求!只有等到timeout才会退出!microsoft已经明确表示INTERNET_OPTION_RECEIVE_TIMEOUT不再适用于Microsoft Internet Explorer 5.0,显而易见,他们处理请求采取了异步处理的方式!呵呵!这下大概可以圆满解释你的问题了!呵呵
这里,我补充如下:
VuGen专用的基于套接字的重播是一种可伸缩以便进行负载测试的轻型引擎。使用线程时是准确的。基于套接字的引擎不支持socks代理服务器。如果在这样的环境中录制,应该使用winInet重播引擎。
运行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、有时关闭卡巴斯基也会解决如上问题