首先要感谢群友的无私分享,才能得到这篇好的学习资料,整理得太好了,所以收藏保存,方便以后学习。
一:LoadRunner常见问题整理
1.LR 脚本为空的解决方法:
1.去掉ie设置中的第三方支持取消掉
2.在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件.
有可能是由于录制的URL地址采用的是localhost的问题,改成分配的IP地址或127.0.0.1试试。
3、插入文本检查点步骤时,使用web_reg_find,通常TextPfx和TextSfx中会包含双引号,需要进行转义(用斜杠),例如:
web_reg_find("Search=Body",
"SaveCount=Welcome",
"TextPfx=欢迎<a class=\"drop\" id=\"viewpro\" onMouseOver=\"showMenu(this.id)\">",
"TextSfx=</a>",
LAST)
遇到flight界面为空的解决的可能方法:
1、如果安装了IE以外的浏览器,并且IE不是默认浏览器,则无法生成录制脚本
2、如果录制脚本时IE不能打开,则需要将浏览器的IE工具高级选项中,将“启用第三方浏览器扩展”的
勾选去掉
3、lr自带的webtours系统,如果点击Flights选项,出现空白页面,请检查本机oracle的 PERL5LIB环境
2.LoadRunner录制脚本时为什么不弹出IE浏览器?
当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。
启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题
提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。
3.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”模式进行录制。
4.运行时的Pacing设置主要影响什么?
Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:A:上次迭代结束后立刻开始、 B:上次迭代结束后等待固定时间、C:按固定或随机的时间间隔开始执行新的迭代。
根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。
5.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?
Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。
6.VuGen支持Netscape的客户证书吗?
不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。
7.VuGen会修改录制浏览器中的代理服务器设置吗?
会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。
8.在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\n”,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
9.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?
这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。
由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。
10.虚拟客户脚本“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运行方式一致,同为线程或进程方式。
11.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。
进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。
13为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去-27796?
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%\system32\csrss.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操作系统的限制,而只受硬件和内部可伸缩性限制的约束。
14.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选项,选项后再回放就成功了。
首先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重播引擎。
15.性能测试往往需要准备大批量的数据,大批量数据的生成方法有很多种,常见的有:
(1)编写SQL语句来插入数据
(2)使用DataFactory等专业的数据生成工具
(3)通过LoadRunner录制回放的方式重复执行生成大批量数据
Tips:
使用DataFactory插入nchar数据类型的数据时会出现空值的情况,可以先修改数据库的数据类型设置,插完数据后再改回来
16.录制脚本中包含中文,出现乱码怎么办?
把录制选项中的Support charset选中UTF-8
录制脚本后,切换到树视图中,打开相应的脚本页面。在右侧的PageView中录制的脚本呈现中文版式,但是当切换到Server Response中,所有的中文全部换成的乱码,如“勌缞仫訆”。
原因是服务器端没有把响应的编码设置为gb2312
在IIS中找到Web.Config文件,在<system.web>….</system.web>节加入<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312"/>后再次录制脚本,乱码变中文。
17.LoadRunner回放脚本时,在浏览器显示的中文是乱码
解决办法(1):
首先设置Run-Time Settings – Browser – Browser Emulation – User-Agent
然后设置IE:
查看-编码-钩上“自动选择”和Unicode(UTF-8)。
解决办法(2):
使用lr_convert_string_encoding函数来转换编码
下面是一个使用的例子:
lr_convert_string_encoding(lr_eval_string("{ReplyContents}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"ReplyMessage");
web_submit_data("postreply.aspx_2",
"Action=http://127.0.0.1/postreply.aspx?infloat=1&topicid=2&&inajax=1",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/xml",
"Referer=http://127.0.0.1/showtopic-2.aspx",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=iconid", "Value=0", ENDITEM,
"Name=title", "Value=", ENDITEM,
"Name=wysiwyg", "Value=0", ENDITEM,
"Name=checkbox", "Value=0", ENDITEM,
"Name=message", "Value=[localimg=180,112]1[/localimg]\r\n\r\n{ReplyMessage}", ENDITEM,
"Name=e_mediatyperadio", "Value=on", ENDITEM,
"Name=sl_attachdesc", "Value=", ENDITEM,
"Name=attachid", "Value=", ENDITEM,
"Name=attachdesc", "Value=", ENDITEM,
"Name=localid", "Value=", ENDITEM,
"Name=attachdesc", "Value=", ENDITEM,
"Name=localid", "Value=1", ENDITEM,
"Name=attachdesc", "Value=", ENDITEM,
"Name=localid", "Value=2", ENDITEM,
"Name=emailnotify", "Value=on", ENDITEM,
"Name=postreplynotice", "Value=on", ENDITEM,
"Name=postfile", "Value=", "File=Yes", ENDITEM,
"Name=postfile", "Value=D:\\\\图片收集\\\\It's about time.JPG", "File=Yes", ENDITEM,
"Name=postfile", "Value=", "File=Yes", ENDITEM,
"Name=uploadallowmax", "Value=10", ENDITEM,
"Name=uploadallowtype", "Value=jpg,gif", ENDITEM,
"Name=thumbwidth", "Value=300", ENDITEM,
"Name=thumbheight", "Value=250", ENDITEM,
"Name=noinsert", "Value=0", ENDITEM,
LAST);
18.可以在LR测试脚本的目录中找到参数文件,直接修改参数文件
The parameter file is stored in the script directory as .dat file extension. It can be opened with a simple text editor like Notepad as it is stored in pure text format. Therefore, you can manipulate the files via the Notepad. You can also use office applications such as Microsoft Excel or OpenOffice.org Calc to work on the file. This greatly the amount of work required for maintaining a long list of data.
19.LR9.x启动VUGen时提示"Failed to connect to server"
After upgrading to LoadRunner 9.x I started getting a window popup which said "Failed to connect to server" every time I opened virtual user generator (vugen.exe).
The solution to this was to close virtual user generator and delete the [vugen.ini] file.
vugen.ini is found in the %systemroot% folder on your Windows PC (usually C:\WINDOWS or C:\WINNT).
Once you've deleted the file, virtual user generator will open without any issues and create a new vugen.ini file automatically.
20.怎样抓取有相同左右边界的动态value?
怎样抓取有相同左右边界的动态value?例如:
stateID="d7lg0ehmjkkm6uin3s4boei7oq">
stateID="cvopakp46ftsf8mh6l37ti3ubm">
stateID="bv9mja8gtgr39ddibm5t9163re">
web_reg_save_param里的ORD应该怎样设置?
ORD: Indicates the ordinal position or instance of the match. The default instance is 1. If you specify "All," it saves the parameter values in an array.
例子:
char outFlightParam[50]; // The name of the parameter for correlation
char outFlightParamVal[50]; // The formatted value of outFlightParam
web_reg_save_param("outFlightVal",
"LB=outboundFlight value=", "RB=>",
"ORD=ALL",
"SaveLen=18",
LAST);
web_submit_form("reservations.pl",
"Snapshot=t4.inf",
ITEMDATA,
"Name=depart", "Value=London", ENDITEM,
"Name=departDate", "Value=11/20/2003", ENDITEM,
"Name=arrive", "Value=New York", ENDITEM,
"Name=returnDate", "Value=11/21/2003", ENDITEM,
"Name=numPassengers", "Value=1", ENDITEM,
"Name=roundtrip", "Value=<OFF>", ENDITEM,
"Name=seatPref", "Value=None", ENDITEM,
"Name=seatType", "Value=Coach", ENDITEM,
"Name=findFlights.x", "Value=83", ENDITEM,
"Name=findFlights.y", "Value=16", ENDITEM,
LAST);
sprintf(outFlightParam, "{outFlightVal_%s}",
lr_eval_string("{outFlightVal_count}"));
sprintf(outFlightParamVal, "Value=%s",
lr_eval_string(outFlightParam));
lr_message("The value argument is : %s", outFlightParamVal);
web_submit_form("reservations.pl_2",
"Snapshot=t5.inf",
ITEMDATA,
"Name=outboundFlight",outFlightParamVal, ENDITEM,
"Name=reserveFlights.x", "Value=92", ENDITEM,
"Name=reserveFlights.y", "Value=10", ENDITEM,
LAST);
21.运行场景时提示“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
vuser_init.c(12): Error -27796
如果觉得下载一个页面超过2分钟不是错误的话,可以在Run-Time设置中选择Preferences->Options,修改Step download timeout(sec)的时间
或者把“Step timeout caused by resources is a warning”设置为Yes,这样下载资源超时也只是作为警告,不作为错误提示,但是对于非资源的下载超时,则总是会提示错误的
22.用strtok函数分割字符串
需要在loadrunner里面获得“15”(下面红色高亮的部分),并做成关联参数。
//Body response 内容: <BODY><; PRE>//OK[8,7,5,15,6,5,0,4,0,3,0,3,2,0,0,0,1
用web_reg_save_param取出“8,7,5,15,6,5,0,4,0,3,0,3,2,0,0,0,1”这一段,然后用strtok函数切割出一个个数字,第四个数字就是要找的值
例如:
extern char * strtok(char * string, const char * delimiters ); // Explicit declaration
char separators[] = ",";
char * token;
lr_save_string("1,2,3,4,5,6","str");
token = (char *)strtok(lr_eval_string("{str}"), separators); // Get the first token
if (!token) {
lr_output_message ("No tokens found in string!");
return( -1 );
}
while (token != NULL ) { // While valid tokens are returned
lr_output_message ("%s", token );
token = (char *)strtok(NULL, separators); // Get the next token
}
23.LoadRunner没有购买webservice协议的license,只有http的,可不可以完全用http协议模拟webservice?
可以,参考:
http://blog.testsautomation.com/2009/01/web-services-performance-using-loadrunner/
http://blog.testsautomation.com/2009/05/validating-web-service-response-with-xpath/
24.在场景设置中不忽略思考时间,但是在查看响应时间的时候怎样让LR自动在响应时间里减去思考时间?
在analysis中找到了设置是否在报告中包含思考时间的地方做相应的设置即可:
25.LoadRunner在运行过程中停掉1半虚拟用户
Another issue that I’m facing from time to time is that LoadRunner stops 50% of running users without any notification, issue, error message etc. I’ve find out that it happens only when running with log level set to ‘always send a message’. Because of that, I suggest to run with log level set to ‘Send message only when error occur’.
26.测试RTMP协议应该在LoadRunner选择什么协议来录制?
用flex协议
有这几个函数可用:
flex_rtmp_connect Connects a client to an RTMP server and sets connection options.
flex_rtmp_disconnect Disconnects a client from an RTMP server.
flex_rtmp_send Sends messages to an RTMP server.
flex_rtmp_receive Receives responses from an RTMP server
Flex can record and replay scripts involving RTMP (Real Time Messaging Protocol). In order to enable RTMP simulation, you must configure the recording options for the Flex protocol.
To enable RTMP:
1 Open the Recording Options dialog box by selecting Tools > Recording Options or clicking the Options button in the Start Recording dialog box.
2 In the Network > Port Mapping node click Options.
3 Set the Send-Receive buffer size threshold to 1500.
27.如何在LoadRunner中运行QTP脚本?
1、运行准备:
1)勾选QTP的Tools--Options--Run的"Alow other Mercury products to run tests and components"
2)录制需要在lr中运行的QTP脚本,并且在QTP脚本中设置事务,Services.StartTransaction "start"与Services.EndTransaction "start"
2、运行QTP脚本
在LR中运行时选择QTP脚本,为QTP脚本存放目录下文件扩展名为.usr的文件。
注:LR中运行QTP脚本时,只能有一个Vuser,否则将报错:
The load generator is currently running the maximum number of Vusers of this type
28.在LR中如何忽略Socket接收数据的验证
在LR中对Socket进行性能测试时,LR会自己判断lrs_receive回来的数据的长度,而如果长度不符的话会有时间延迟的情况(这是性能测试完全不能接受的事情),如果做到这一点呢,经过反复尝试,发现一种简单的方法(用*代替具体的长度):
类似于将:
recv buf1 12
"Hello, Denny"
改为:
recv buf1 *
"Hello, Denny"
一切OK。
29.LoadRunner9.5的Controller中不能添加Apache的监控
在C:\Program Files\HP\LoadRunner\dat\online_graphs中找到online_resource_graphs.rmd文件,修改[Apache]部分中的EnableInUI为1
参考:
http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1274450165814+28353475&threadId=1229523
30.VB Vuser开发ADO脚本,提示“user-defined type not defined”
想在VB Vuser写入模拟数据操作的过程,然后在VB Vuser里定义了这个全局变量
Private m_Conn As ADODB.Connection '连接对象
Private m_Reco As ADODB.Recordset '结果集
但是在VB Vuser中不识别这个对象,报出user-defined type not defined
需要在Run-Time 设置中的VBA部分把ADO的库选上
如果用VB Script虚拟用户来开发就不要,直接用CreateObject来创建ADO对象即可
31.loadrunner9.5录制脚本时出现c:\PROGRA~1\MICROS~1\office12\Grooveutil.DLL时出错内存位置访问无效
Office2007的问题,IE加载项禁用Groove GFSBrowser Helper 组件
32.LR自带的例子端口号怎么修改?
LR自带的例子端口号是1080,我怎么样把这个端口设置我自己想用的端口号8088,在什么地方设置在LR安装目录下,找到Xitami.config文件,找到portbase,可以修改它(默认是1000);
默认的端口号是portbase+80;要把端口号改成8088,就把portionbase改为8008,保存之后就是了(8088=8008+80)。
33.用Web_reg_find查找中文字符串时查找不到
脚本文件里有个default.cfg,里面有个参数是 UTF8InputOutput ,将其值改为0
34.替代IP Wizard的脚本
http://hi.baidu.com/higkoo/blog/item/39bbb21bc33d76dcac6e751c.html
LoadRunner自带的“IP Wizard”用起来非常麻烦,要不停的点,重要的是最后还必须重启系统生效。
于是乎写个脚本替代之:
1. 假设客户端IP为 192.168.10.31
2. 假设服务端IP为 192.168.10.10
3. 需要模拟的IP为 110.119.120.122
那么,客户端提供添加虚拟IP的BAT脚本:
netsh interface ip add address 本地连接 110.119.120.122 255.255.0.0
对应的删除设置为:
netsh interface ip del address 本地连接 110.119.120.122
对应服务器添加虚拟路由的Shell脚本:
route add -host 110.119.120.122 gw 192.168.10.31
删除路由的脚本:
route del -host 110.119.120.122 gw 192.168.10.31
这样就非常方便了,不用重启任何机器,执行脚本就生效,再执行脚本就取消。
35.如何从命令行调用LoadRunner脚本?
Here is the command line that you need to execute to run a VuGen script from the command prompt:
<LoadRunner>\bin\mmdrv.exe -usr <path to usr file>
Note:
In order to get all the other options that go with the command, run mmdrv.exe from the command prompt without any options.
36.请问"int64这个类型,在LR中怎么表示"。我将一段C的代码放在LR中,LR不认int64这个类型,怎么解决?
把那段C代码做成DLL,然后在LR中调用
37.LoadRunner监控远程机器Windows资源,提示“net use failed”
解决办法:
在被监控机器上更改本地帐户的共享和安全模式为经典模式。控制面板->管理工具->本地安全策略->网络访问:本地帐户的共享和安全模式->经典模式。
监视连接前的准备工作:
首先保证被监视的windows系统开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service
被监视的WINDOWS机器:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹,(要是没有自己手动加)
然后保证在安装LR的机器上使用运行.输入\\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了
38.LoadRunner脚本中出现乱码问题现象某个链接或者图片名称为中文乱码,脚本运行无法通过。
错误分析
脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。
解决办法重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。
39.LoadRunner不执行检查方法错误现象在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。
错误分析
由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的数据执行保护检查,所以在设置检查点后,需要开启检查功能。
解决办法打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。
需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。
40.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 Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。
41.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。
错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。
错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。
解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。
42.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。
错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。
错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。
解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。
错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。
错误分析:服务器碰到了意外情况,使其无法继续回应请求。
解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。
43.LoadRunner请求无法找到:在录制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”模式来录制脚本。
44.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。
错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。
错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。
解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。
45.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文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。
解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。
46.LR启动controller报错“transaction monitor not available”
1.多是OS系统问题,修复试试或升级
2.或修复LR试试
47.Loadrunnber 报错误:Error -- memory violation : Exception ACCESS_VIOLATION received.的一种情况
Posted on 2011-01-05 12:12蝈蝈俊 阅读(433) 评论(0) 编辑收藏
最近写的一个Loadrunner脚本,最后一步是点击“退出”按钮退出登录状态,如下:
web_text_link("[退出]",
"Snapshot=t18.inf",
DESCRIPTION,
"Text=[退出]",
ACTION,
"UserAction=Click",
LAST);
return 0;
但是会报错误:
Action1.c(94): Error: C interpreter run time error: Action1.c (94): Error -- memory violation : Exception ACCESS_VIOLATION received.
Action1.c(94): Notify: CCI trace: Action1.c(94): web_text_link(0x02080870, 0x0208085f "Snapshot=t18.inf", 0x02080a42 "DESCRIPTION", 0x02080853, 0x02080a3b "ACTION", 0x020809de "UserAction=Click", 0x02080a6a "LAST")
Action1.c(94): Notify: CCI trace: Compiled_code(0): Action1()
经过试验,发现是因为 退出后有个自动跳转。
如果退出结束代码修改为下面就没有问题了。
web_text_link("[退出]",
"Snapshot=t18.inf",
DESCRIPTION,
"Text=[退出]",
ACTION,
"UserAction=Click",
LAST);
web_browser("Sync",
"Snapshot=t18.inf",
DESCRIPTION,
ACTION,
"Sync",
LAST);
return 0;
结论:
web_text_link如果有中间跳转,不能放在代码的最后,最后要有一个 Sync 。
48.Step download timeout(sec)设置
这个默认是120秒,但是经常我们要设置的更大一些,具体设置方法:Vugen--》Vuser---》Runtime-settings----》Preferences------》option,将Step download timeout(sec)默认值120s改为自己需要的值,其次要改变HTTP-reguest connnect timeout(sec)和HTTP-reguest receive timeout(sec)也为相应的值。
49.修改本机tcp连接数
因为个人pc机的默认的tcp连接数只有15个(xp),所以我们在模拟虚拟多个用户时,就会遇到tcp的连接限制,从而报错。修改的方法:windows下运行 Patch.exe
输入C,再输入你要的TCP/IP连接数字(一般为500~2000)回车确认
输入Y 回车确认。
倒计时15秒后结束。
接着再运行下Patch.exe,看连接数是不是由原来的10变成自己改了的数值。
Patch.exe 下载地址:http://www.touchboy.cn/2007/05/% ... %E6%8E%A5%E6%95%B0/
50.关于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");
51. LR中错误代号为27796的一个解决方法
错误如下:
52.
二:LoadRunner面试(笔试)问题整理
1. 什么是负载测试?什么是性能测试?
负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试,例如,访问一个页面的响应时间规定不超过1秒,负载测试就是测试在响应时间为1秒时,系统所能承受的最大并发访问用户的数量。
压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。
性能测试:指在一定的约束条件下(指定的软件、硬件、网络环境等),确定系统所能承受的最大负载压力。
2. 性能测试包含了哪些测试(至少举出3种)
性能测试包含负载测试、压力测试、大数据量测试、疲劳强度测试等。
3. 简述性能测试的步骤
第一,分析产品结构,明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求,必要时基于LOAD测试的相同测略需同时考虑稳定性测试的需求。
第二,分析应用场景和用户数据,细分用户行为和相关的数据流,确定测试点或测试接口,列示系统接口的可能瓶颈,一般是先主干接口再支线接口,并完成初步的测试用例设计。
第三,依据性能测试需求和确定的测试点进行测试组网设计,并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试性设计方案和对测试工具的需求。
第四,完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程,并准备好测试用例将用到的测试数据。
第五,确定采用的测试工具。
第六,进行初验测试,以主干接口的可用性为主,根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境。
第七,迭代进行全面的性能测试,完成计划中的性能测试用例的执行。
第八,完成性能测试评估报告。
在进行性能测试的时候,我们需要知道一些有效的性能指标,下面我们来列出一些主要的性能指标:
一是,通用指标(指Web应用服务器、数据库服务器必需测试项):
*ProcessorTime:指服务器CPU占用率,一般平均达到70%时,服务就接近饱和;
*Memory Available Mbyte:可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重;
*Physicsdisk Time :物理磁盘读写时间情况。
二是,Web服务器指标:
*Avg Rps:平均每秒钟响应次数=总请求时间/秒数;
*Avg time to last byte per terstion(mstes):平均每秒业务角本的迭代次数;*Successful Rounds:成功的请求;
*Failed Rounds:失败的请求;
*Successful Hits:成功的点击次数;
*Failed Hits:失败的点击次数;
*Hits Per Second:每秒点击次数;
*Successful Hits Per Second:每秒成功的点击次数;
*Failed Hits Per Second:每秒失败的点击次数;
*Attempted Connections:尝试链接数。
三是,数据库服务器指标:
*User 0 Connections :用户连接数,也就是数据库的连接数量;
*Number of deadlocks:数据库死锁;
*Butter Cache hit:数据库Cache的命中情况。
4. 简述使用Loadrunner的步骤
A4:制定性能测试计划—>开发测试脚本—>设计测试场景—>执行测试场景—>监控测试场景—>分析测试结果
5. 什么时候可以开始执行性能测试?
功能测试通过;一般需要进行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模块。
6. LoadRunner由哪些部件组成?
A6:主要有三部分组成:
7. 你使用LoadRunner的哪个部件来录制脚本?
使用Virtual User Generator录制测试脚本
8. LoadRunner的哪个部件可以模拟多用户并发下回放脚本?
LoadRunner的Controller组件。
9. 什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?
在性能测试过程中,需要模拟大量用户在同一时刻,访问系统并同时操作某一任务,可以通过配置集合点来实现,多个用户同时进行某操作;
集合点可以在服务器上创建密集的用户负载,使LoadRunner能够测试服务器在负载状态下的性能。
设置集合点函数:lr_rendezvous("Meeting"); // Meeting是集合点名称
10. 什么是场景?场景的重要性有哪些?如何设置场景?
场景用于模拟用户实际业务操作;
LoadRunner中场景有手工场景和面向目标的场景。
设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间,配置负载生成
1.选择场景中需要的脚本
2.选择为目标场景,还是指定的手工场景
3.设置用户数、设置产生负载的设备
4.设置执行策略
11. 请解释一下如何录制web脚本?
LR通过转发请求,来捕获数据包,来形成脚本
解释:1.基于浏览器的应用程序推荐使用HTML-based Script, 脚本中采用
HTML页面的形式来表示,这种方式的Script脚本容易维护,容易理解,使用该选项中的advance中的第一个选项,如果单纯的HTML方式,是不允许使用关联的。
2.不是基于浏览器的应用程序推荐使用URL-based Script,脚本中的表示采用基于URL 的方式,不是很好阅读。
解释:1.是否记录录制过程中的ThinkTime,如果记录,还可以设置最大值,一般我不记录这个值。
2.通知Vugen去重新设置每个action之间的Http context,缺省是需要的。
3.完整记录录制过程的log,
4.保存一个本地的snapshot,可以加速显示
5.把html的title放到web_reg_find函数里面
6.支持的字符集标准
7.Http header的录制,我们采用缺省即可,不需要用web_add_header去录制非标准的header信息。
对录制的content的内容进行filter,不作为resource处理的。
解释:这个就是我前面提到的关联,系统已经预先设置好了一些常见的关联rules,我们录制脚本之前,可以把系统的
12. 为什么要创建参数?如何创建参数?
参数:在环境变化时必须时脚本具有环境变化的能力,就需要参数化(客户端发送到服务器端)
1.确定要参数话的数据
2.设定规则形式来取值
13. 什么是关联?请解释一下自动关联和手动关联的不同。
关联:很多构架用sessionid等方法标识不同任务和数据,应用在每次运行时方式发送数据不完全相同,需要利用的机制对录制的脚本进行处理,这种机制叫做关联(服务端发送到客户端)
14. 场景设置有哪几种方法?
目标场景,手工场景
15. 你如何找出哪里需要关联?请给一些你所在项目的实例。
用户登陆,
客户端发送请求后,服务端验证正确性后,发送给客户端sessionid,是某种规则产生。
16. 你在哪里设置自动关联选项?
两地方可以设置
1.设置允许录制时进行自动关联,可以自定义规则
2.录制完成后,vuser-scan action for correlations
17. 哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联)
web_reg_save_param()函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据,所以在做关联时,需要找出动态数据的左、右边界字符串。
18. 你在VUGen中何时选择关闭日志?何时选择标准和扩展日志?
Run-time,log,
当调试脚本时,可以只输出错误日志,当在场景找你管加载脚本时,日志自动变为不可用。
Standard Log Option:选择标准日志时,就会在脚本执行过程中,生成函数的标准日志并且输出信息,供调试用。大型负载测试场景不用启用这个选项。
扩展日志包括警告和其他信息。大型负载测试不要启用该选项。用扩展日志选项,可以指定哪些附加信息需要加到扩展日志中
19. 你如何调试LoadRunner脚本?
VuGen有两个选项帮助调试Vuser脚本。Run Step by Step命令和断点(breakpoints)。Option对话框中的调试设置(Debug setting)项,可以确定在场景执行过程中执行轨迹范围。调试信息写在output窗口。可以用
lr_set_debug_messag函数在脚本中手工设置信息类型。如果我们只想接收到一小段脚本的调式信息。
20. 你在LR中如何编写自定义函数?请给出一些你在以前进行的项目中编写的函数。
在创建用户自定义函数前我们需要和创建DLL(external libary)。把库放在VuGen bin目录下。一旦加了库,把自定义函数分配做一个参数。该函数应该具有一下格式:__declspec (dllexport) char* <function name>(char*, char*)。
Milan
21. 什么是逐步递增?你如何来设置?
Ramp up这个选项用于逐渐增加服务器的虚拟用户数或负载量。设置一个初始值而且可以在两个迭代之间设置一个值等待。设置Ramp up,请到‘Scenario Scheduling Options’。
22. 以线程方式运行的虚拟用户有哪些优点?
VuGen提供了用多线程的便利。这使得在每个生成器上可以跑更多的虚拟用户。如果是以进程的方式跑虚拟用户,为每个用户加载相同的驱动程序到内存中,因此占用了大量的内存。这就限制了在单个生成器上能跑的虚拟用户数。如果按线程运行,给定的所有虚拟用户数(比如100)只是加载一个驱动程序实例到内存里。每个线程共用父驱动程序的内存,因此在每个生成器上可以跑更多的虚拟用户。
23. 当你需要在出错时停止执行脚本,你怎么做?
lr_abort函数放弃虚拟用户脚本的执行。说明虚拟用户停止Action的执行,直接执行vuser_end然后结束执行。在出现错误情况下想手工放弃脚本的执行,这个函数是有用的。用这个函数停止脚本时,Vuser被指定为“Stopped”状态。为了这个函数起作用,开始时候就不能选择Run-Time Settings中的Continue on error选项。
24. 响应时间和吞吐量之间的关系是什么?
吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较时,可以发现随着吞吐量的降低,响应时间也降低,同样的,吞吐量的峰值和最大响应时间差不多在同时出现。
25. 说明一下如何在LR中配置系统计数器?
通过Web资源监视器,利用这些监控器可以分析web服务器的吞吐量、点击率、每秒http响应数以及每秒下载的页面数。
26. 什么是think time?think_time有什么用?
思考时间是真实用户在action之间等待的时间。例如:当一个用户从服务器接收到数据时,用户可能需要在响应之前等待几分钟回顾数据,这种推迟被称为思考时间。
27. 标准日志和扩展日志的区别是什么?
Standard Log Option:选择标准日志时,就会在脚本执行过程中,生成函数的标准日志并且输出信息,供调试用。大型负载测试场景不用启用这个选项。
扩展日志包括警告和其他信息。大型负载测试不要启用该选项。用扩展日志选项,可以指定哪些附加信息需要加到扩展日志中
28. 解释以下函数及他们的不同之处。
Lr_debug_message
lr_debug_message 函数在指定的消息级别
// 处于活动状态时发送一条调试消息。如果指定的
// 消息级别未处于活动状态,则不发出消息。
Lr_output_message
要发送不是特定错误消息的特殊通知,
Lr_error_message
函数将错误消息发送到
// 输出窗口和 Vuser日志文件
Lrd_stmt lrd_exec 函数执行 lrd_stmt设置的 SQL 语句。
Lrd_fetch 函数从结果集中提取后续若干行
result set.
函数准备用于
// 通过光标输出字符串(通常为 SQL语句)
// 的下一结果集。对于 CtLib,它发出 ct_result
// 命令,并且在 ODBC中它运行用于当前数据库
29. 什么是吞吐量?
单位时间内系统处理客户端的请求数。
30. action和init、end除了迭代的区别还有其他吗?
在init、end中不能使用集合点、事务等, init、end只执行一次。
31. 在什么地方设置HTTP页面filter?
在runtime_settings中download filter里面进行设置。
32. pot mapping的原理是什么?
就是代理服务器
33. HTTP的超时有哪三种?
HTTP-request connect timeout、HTTP-request receive timeout、step download timeout
34. 什么是contentcheck?如何来用?
ContentCheck的设置是为了让VuGen检测何种页面为错误页面。如果被测的Web 应用没有使用自定义的错误页面,那么这里不用作更改;如果被测的Web应用使用了自定义的错误页面,那么这里需要定义,以便让VuGen 在运行过程中检测,服务器返回的页面是否包含预定义的字符串,进而判断该页面是否为错误页
面。如果是,VuGen就停止运行,指示运行失败。
使用方法:点击在runtime settings中点击“contentcheck”,然后新建立一个符合要求的应用程序和规则,设定需要查找的文本和前缀后缀即可使用。
35. network中的speed simulation是模拟的什么带宽?
模拟用户访问速度的带宽。
36. 生成WEB性能图有什么意义?大概描述即可。
可以很直观的看到,在负载下系统的运行情况以及各种资源的使用情况,可以对系统的性能瓶颈定位、性能调优等起到想要的辅助作用。
37. 如果刷新controller里的脚本?
在controller中,点击detailis-Refresh-script即可。
38. 进程和线程有什么区别?
线程有自己的全局数据。线程存在于进程中,因此一个进程的全局变量由所有的线程共享。由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用一样。在Controller中将使用驱动程序(如mdrv.exe、r3vuser.exe)运行vuser。如果按进程运行每个vuser,则对于每个vuser实例,都将反复启动同一驱动程序并将其加载到内存中。将同一驱动程序加载到内存中会占用大量的RAM(随机存储器)及其他系统资源。这就限制了可以在任一负载生成器上运行的vuser数量。如果按线程运行每个vuser,Controller为每50个vuser(默认情况下)仅启动驱动程序(如mdrv.exe)的一个实例。该驱动程序将启动几个vuser,每个vuser都按线程运行。这些线程vuser将共享父驱动进程的内存段。这就消除了多次重新加载驱动程序/进程的需要,节省了大量内存空间,从而可以在一个负载生成器上运行更多的Vuser.
39. 如何把脚本和结果放到load generator的机器上?
在controller中,点击Results-Results settings,在里面进行相应的设置即可。
40. 如何设置才能让集合点只对一半的用户生效?
对集合点策略进行相应的设置即可。即在controller中,点击Scenario-Rendezvous-policy进行相应的设置即可,由于题目中“一半的用户”没有说明白具体指什么样的用户,现在不好确定具体对里面的哪个选项进行设置。
41. LRd的API分为几类
A:通用的API:,就是跟具体的协议无关,在任何协议的脚本里都能用的;
B:针对协议的:像lrs前缀是winsock的;lrd的是针对database;
C:自定义的:这个范围就比较广了;比如至少有Java Vuser API、lrapi、XML API。还可以添加WindowsAPI和自定义函数库。
42. LR几种日志函数的区别?
【lr_message】 int lr_message (const char *format, exp1, exp2,…expn.);中文解释:lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时,输入文件为output.txt。
【lr_log_message】 int lr_log_message (const char *format, exp1, exp2,…expn.);中文解释:lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序),而不是发送到输出窗口。通过向日志文件发送错误消息或其他信息性消息,可以将该函数用于调试。 【lr_error_message】 int lr_error_message (const char *format, exp1, exp2,…expn. );中文解释:lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。要发送不是特定错误消息的特殊通知,请使用lr_output_message。
【lr_output_message】 int lr_output_message (const char *format, exp1, exp2,…expn.);中文解释:lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。
【lr_debug_message函数组】 int lr_debug_message (unsigned int message_level, const char *format, … );中文解释:lr_debug_message函数在指定的消息级别处于活动状态时发送一条调试信息。如果指定的消息级别未出于活动状态,则不发送消息。您可以从用户界面或者使用lr_set_debug_message,将处于活动状态的消息级别设置为MSG_CLASS_BRIEF_LOG或MSG_CLASSS_EXTENDED_LOG。要确定当前级别,
请使用lr_get_debug_message。 unsigned int lr_get_debug_message ( );中文解释:lr_get_debug_message函数返回当前的日志运行时设置。该设置确定发送到输出端的信息。日志设置是使用运行时设置对话框或通过使用lr_set_debug_message函数指定的。 int lr_set_debug_message (unsigned int message_level, unsigned int on_off); 中文解释:lr_set_debug_message函数设置脚本执行的调试消息级别message_lvl。通过设置消息级别,可以确定发送哪些信息。启动设置的方法是将LR_SWITCH_ON作为on_off传递,禁用设置的方法是传递LR_SWITCH_OFF。
【lrd_stmt】:将SQL语句与光标关联
【lrd_fetch】:提取结果集中得下一条记录
43. 性能瓶颈分析方法?
同一场景
1.小用户量的情况下测试
2.大用户量情况下的测试
分析的方法:
整个系统架构分析,系统响应时间消耗,利用图表分析
查看事务响应时间,通过事务摘要图分析事务响应时间,那个消耗最大(通过小用户量和大用户量的响应时间分析,查看那个事务响应时间最高),确定哪部分功能是性能的瓶颈,分析window resource图表,查看cpu
使用下列计数器标识cpu瓶颈
Processor\ Interrupts/sec
Processor\ % Processor Time
Process(process)\ % Processor Time
System\ Processor Queue Length
通过它来确定是否硬件本身出现瓶颈,或者进一步确定应该怎么去判断性能产生瓶颈的地方!
下一步去判断进程,那个进程消耗cpu最高
下边就有很多种情况需要你自己去判断,有可能是进程调用了的函数消耗了系统资源形成上边的问题,也有可能是后台数据库出现的问题(这个就要看你的系统配置是什么样的,比如你的db服务器和应用服务器都配置在一台机器上)
性能产生瓶颈有很多地方,所以需要进一判断,是否是后台数据库的问题还有待分析,是那条语句导致的问题需要进一步分析判断。
分析原则:
• 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)
• 查找瓶颈时按以下顺序,由易到难。
服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库,web服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)
注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。
• 分段排除法很有效
分析的信息来源:
•1 根据场景运行过程中的错误提示信息
•2 根据测试结果收集到的监控指标数据
一.错误提示分析
分析实例:
1 •Error: Failed to connect to server “10.10.10.30:8080″: [10060] Connection
•Error: timed out Error: Server “10.10.10.30″ has shut down the connection prematurely
分析:
•A、应用服务死掉。
(小用户时:程序上的问题。程序上处理数据库的问题)
•B、应用服务没有死
(应用服务参数设置问题)
例:在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的 AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%
•C、数据库的连接
(1、在应用服务的性能参数可能太小了 2、数据库启动的最大连接数(跟硬件的内存有关))
2 Error: Page download timeout (120 seconds) has expired
分析:可能是以下原因造成
•A、应用服务参数设置太大导致服务器的瓶颈
•B、页面中图片太多
•C、在程序处理表的时候检查字段太大多
二.监控指标数据分析
1.最大并发用户数:
应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。
在方案运行中,如果出现了大于3个用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。
如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。
2.业务操作响应时间:
• 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。
• 细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关?
• 如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题
3.服务器资源监控指标:
内存:
1 UNIX资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。
2 Windows资源监控中,如果Process\Private Bytes计数器和Process\Working Set计数器的值在长时间内持续升高,同时Memory\Available bytes计数器的值持续降低,则很可能存在内存泄漏。
内存资源成为系统性能的瓶颈的征兆:
很高的换页率(high pageout rate);
进程进入不活动状态;
交换区所有磁盘的活动次数可高;
可高的全局系统CPU利用率;
内存不够出错(out of memory errors)
处理器:
1 UNIX资源监控(Windows操作系统同理)中指标CPU占用率(CPU utilization),如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQL Server,可接受的最大上限是80-85%
合理使用的范围在60%至70%。
2 Windows资源监控中,如果System\Processor Queue Length大于2,而处理器利用率(Processor Time)一直很低,则存在着处理器阻塞。
CPU资源成为系统性能的瓶颈的征兆:
很慢的响应时间(slow response time)
CPU空闲时间为零(zero percent idle CPU)
过高的用户占用CPU时间(high percent user CPU)
过高的系统占用CPU时间(high percent system CPU)
长时间的有很长的运行进程队列(large run queue size sustained over time)
磁盘I/O:
1 UNIX资源监控(Windows操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。
2 Windows资源监控中,如果 Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec页面读取操作速率很低,则可能存在磁盘瓶径。
I/O资源成为系统性能的瓶颈的征兆 :
过高的磁盘利用率(high disk utilization)
太长的磁盘等待队列(large disk queue length)
等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O)
太高的物理I/O速率:large physical I/O rate(not sufficient in itself)
过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself))
太长的运行进程队列,但CPU却空闲(large run queue with idle CPU)
4.数据库服务器:
SQL Server数据库:
1 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。
2 如果Full Scans/sec(全表扫描/秒)计数器显示的值比1或2高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。
3 Number of Deadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。
4 Lock Requests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。
Oracle数据库:
1 如果*内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。
快存(共享SQL区)和数据字典快存的命中率:
select(sum(pins-reloads))/sum(pins) from v$librarycache;
select(sum(gets-getmisses))/sum(gets) from v$rowcache;
*内存 select * from v$sgastat where name=’free memory’;
2 如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。
缓冲区高速缓存命中率:
select name,value from v$sysstat where name in (‘db block gets’,
‘consistent gets’,'physical reads’) ;
Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))
3 如果日志缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。
日志缓冲区的申请情况:
select name,value from v$sysstat where name = ‘redo log space requests’ ;
4 如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序。
内存排序命中率: