xkmj 发表于 2010-3-18 23:10:46

LR手动关联问题求解

语法

int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

参数说明

ParamName:存放动态数据的参数名称

list of Attributes:其它属性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。属性值不分大小写,例如 Search=all。以下将详细说明每个属性值的意义:

Notfound:指定当找不到要找的动态数据时该怎么处置。
Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。
Notfound=warning:当找不到动态数据时,不发出错误讯息,只发出警告,脚本也会继续执行下去不会中断。在对角本除错时,可以使用此属性值。
LB:动态数据的左边界字符串。此属性质是必须要有的,而且区分大小写。
RB:动态数据的右边界字符串。此属性质是必须要有的,而且区分大小写。
RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性质可以是All或是数字,而且可有可无。
Search:搜寻的范围。可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值)。此属性质可有可无。
ORD:指明从第几次出现的左边界开始才是要撷取的数据。此属性质可有可无,默认值是1。假如值为All,则所有找到符合的数据会储存在数组中。
SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始储存到参数中。此属性质不可为负数,其默认值为0。
Convert:可能的值有二种:
HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式
HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式
SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此参数可有可无,默认值是-1,表示储存到结尾整个字符串。

范例

web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner会搜寻网页中所有以「<a href=」开头,且以「’>」结束,当中包含的字符串,并且储存在「A」参数中。

Tips and Tricks

以下提供一些关联的常见问题:

如何打印出参数值?
lr_output_message这二个函数来做到。例如:
lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));

lr_eval_string与lr_output_message函数的使用说明请参考LoadRunner Online Function Reference。

在脚本的data目录下找不到路制时的快照(snapshot)
造成在脚本的data目录下找不到路制时的快照(snapshot)的可能原因如下:
脚本是由VuGen 6.02或更早的版本所录制的
汇入的Action不会包含快照(snapshot)的档案
脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot)
某些步骤并不会产生快照(snapshot),如浏览某个资源
快照(snapshot)功能被取消
【Tools】>【General options】>【Correlation】tab >【Save correlation information during replay】
开启WinDiff时出现「File no longer available」的错误讯息
WinDiff这个工具有些限制,无法开启包含空格符的目录或是脚本,所以建议命名时不要使用空格符,并且尽可能将名称取短一点。
录制时突然跳出【Correlation warning】对话窗口
当你有勾选自动关联的【Issue a popup message and let me decide online】选项,当VuGen发现有可能要做关联的数据时,就会跳出【Correlation warning】的窗口,询问你要做关联(Correlation in script)还是要忽略(Ignore)。
另外你也可以勾选【Perform correlation in script】,让VuGen自动作关联,不会再跳出询问窗口。
或是勾选【Disable correlation engine】,关闭自动关联的功能。


附录:在实践中发现有时候服务器会返回超过10W字符的xml报文,经常会获取的数字长度超过10W,使用关联函数注册有时也没用,不知道是怎么回事L

[ 本帖最后由 云层 于 2010-3-19 17:28 编辑 ]

xkmj 发表于 2010-3-18 23:49:31

LR常见问题整理

1.LoadRunner录制脚本时为什么不弹出IE浏览器?
  当一台主机上安装多个浏览器时, LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。
  启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题
  提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。
  2.录制Web脚本时,生成的脚本中存在乱码该如何解决?
  录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。
  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.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?
  由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。
  进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。
  检查执行结果时推荐使用web_reg_find方法。
  5.运行时的Pacing设置主要影响什么?
  Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。
  根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。
  6.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?
  Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。
  7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?
  造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version=”1.0” encoding=”zh_cn”?>,因此会有上面的错误提示。
  解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。
  8.VuGen支持Netscape的客户证书吗?
  不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。
  9.VuGen会修改录制浏览器中的代理服务器设置吗?
  会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。
  10.在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
  11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?
  这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。
  由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。
  12.虚拟客户脚本“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运行方式一致,同为线程或进程方式。
  13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
  这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。
  进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。
  14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
  在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操作系统的限制,而只受硬件和内部可伸缩性限制的约束。
  15.Controller中设置了用户并发数量,但是运行时为何初始化的用户数量少于实际数量?
  主要时设置问题。在Tools→options→Run-time setting中可以设置每次最多初始化的虚拟用户。如果需要100个并发用户,则将该值设置为大于100的数值。另外,注意LoadRunner相关协议License的更新,确保使用的License能够允许所需要的并发用户数量。
  16.如何让场景的用户执行发生错误继续运行,以保证不间断进行压力测试?
  用VuGen打开虚拟用户脚本后,进入“Run-time Settings”对话框后,依次进入“General→Miscellaneous”,可以看到Miscellaneous设置中关于“Error Handling”的配置。勾选“Continue on error”即可让虚拟用户发生错误继续运行。
  17.为什么.NET虚拟用户有时不能在远程主机执行?
  主要时LoadRunner的版本问题。根据笔者的经验,如果是Microsoft Visual Studio 2005开发的虚拟用户,同时LoadRunner客户端的版本低于8.1,执行Controller的主机将会发生错误。
  因此要想正确的运行Microsoft Visual Studio 2005开发的.NET虚拟用户,客户端最好装8.1以上的版本,Controller的主机则安装8.0和8.1两个版本均可。此外,产生压力的LoadRunner客户端上预先应该安装.NET运行环境,如果Microsoft Visual Studio 2005开发的是.NET虚拟用户,则应该安装Microsoft .NET Framework SDK v2.0。
  18.测试分析结果中会统计Action时间,而实际上可能并不须要这些数据,如何只显示自己定义的用户事务?
  进入脚本的运行时设置,依次进入General→Miscellaneous。默认情况下,自动事务配置“Automatic Transactions”下有两个选项:第一个是把脚本的Action部分定义为一个事务;第二个时把脚本的每一部分定义为一个事务。去掉这两个勾选后,测试结果将会只显示自己定义的用户事务。
  19.测试结果中,Summary和平均事务响应时间图里的各个事务的最大值、平均值、最小值为什么显示不一样?
  主要是受采样时间的影响。Summary里的事务平均响应时间是根据整个场景执行过程得到的数据计算所得,最大值与最小值也是从整个场景中得到的。平均事务响应时间图主要时按照LoadRunner分析出来的采样频率来获取事务响应时间的最大值与最小值,然后计算平均值。
  可以通过“Set Granularity”来修改平均事务响应时间图的采样频率。如果把“Granularity”设为场景执行时间,则统计结果将会一致。
  20.统计结果中的总点击量Total Hits时用户的鼠标点击次数吗?
  Total Hits不时按照用户的鼠标点击次数来计算的,而是按照各个虚拟客户端向后台发起的总的请求数来进行统计的。例如在向服务器请求的一个页面中,如果该页面包含5个图片,用户只要单击鼠标就可以访问该页面,而单个虚拟用户在LoadRunner访问的点击量为1+5=6次。
  21.有些Web测试结果分析图(例如每秒返回页面数)在测试结果分析图中无法看到,如何进行配置?
  用VuGen打开虚拟用户脚本后,进入“Run-time Settings”对话框后,依次进入“Internet Protocol>Preference”,可以看到一些Web性能图配置。
  勾选上面得选项后,Controller将会在测试执行过程中生成数据,然后可在Analysis中查看相应的性能结果分析图。
本文出自 51CTO.COM技术博客

rich51 发表于 2010-3-19 07:41:38

谢谢好贴,另外想冒昧请教一个手动关联问题.

求助: 请问各位专家一个loadrunner脚本手工关联问题
loadrunner, 手工关联

录制了两个不同客户对同一请求脚本, 两个脚本中有下列内容,请指导一下或提个思路,如何进行类似情形关联;
客户1:
web_submit_data(‘Listofproducts’,
'Action=https://www.ecomm.com/test1/order_submit',
'Method=POST',
'RecContentType=text/html',
'Referer=https://www.ecomm.com/test1/order',
'Snapshot=t2.inf',
'Mode=HTML',
ITEMDATA,
'Name=area1_0', 'Value=need_va1', ENDITEM,
'Name=area2_0', 'Value=need_va2', ENDITEM,
'Name=area3_0', 'Value=need_va3', ENDITEM,
LAST);

客户2:
web_submit_data(‘Listofproducts’,
'Action=https://wwwecommcom/test1/order_submit',
'Method=POST',
'RecContentType=text/html',
'Referer=https://wwwecommcom/test1/order',
'Snapshot=t2.inf',
'Mode=HTML',
ITEMDATA,
'Name=area1_0', 'Value=need_va1', ENDITEM,
'Name=area2_0', 'Value=need_va2', ENDITEM,
'Name=area3_0', 'Value=need_va3', ENDITEM,
'Name=area1_1', 'Value=need_va4', ENDITEM,
'Name=area2_1', 'Value=need_va5', ENDITEM,
'Name=area3_1', 'Value=need_va6', ENDITEM,
'Name=area1_2', 'Value=need_va7', ENDITEM,
'Name=area2_2', 'Value=need_va8', ENDITEM,
'Name=area3_2', 'Value=need_va9', ENDITEM,
LAST);

云层 发表于 2010-3-19 17:29:16

这个基本上不怎么好做关联。。。提交的数据量都是动态的

你要先知道提交的数据量是怎么动态生成的,而且这些数据的值是服务器什么时候发给你的。

我总觉得你这个东西是参数化的问题,不是关联的问题

xkmj 发表于 2010-3-26 22:35:06

还是关联问题

我现在做的是boss业务的性能测试,在一些订单类的业务脚本录制时碰到很头痛的问题,就是 会录制到一个叫flow_map 的参数,该参数后面带了2万多字节的数据,在回放时这些是XML,被加密了存放在那个参数里面,因为那个参数出现过几次,每次值不一样 都是一两万个字符,自动关联有时候只能关联一个,有时候不关联,但是那些数据是必须被关联的,否则会报重复提交的错误,我也是有时候手动关联会成功有时候找不到要关联的数据。不知道谁有没有好点的办法?多谢~~:)

xkmj 发表于 2010-3-26 22:38:08

回复rich51

rich51你的问题。。submit中的数据个人感觉,如果是你手动输入的,一般都要关联,如果是其他自动产生的数据也不用怎么管。只是可能会碰到我那样的问题。。就是submit里面有一个1万多字符的参数,那个不参数化或关联就会一直提交相同的数据。

rich51 发表于 2010-4-2 00:16:04

谢谢以上两位的见解,希望有朋友,特别是银行系统的测试朋友,有无遇到类似问题,帮忙分析一下,这确实是一个关联问题。

yandaju 发表于 2011-8-19 00:37:11

回复 4# 云层


    请问关联中文内容时出现乱码怎么解决?谢谢!
页: [1]
查看完整版本: LR手动关联问题求解