软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试工具>>Mercury>>正文
如何在脚本中做关联(二)
文章出处:51testing博客 作者:笨笨 发布时间:2007-04-03

结果会有二种:
o 在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。
o 在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。
您要找的标头格式如下:
*** [tid=b9 Action1 2] Receiving response from host astra.merc-int.com:80 ( 25/11/2002 12:04:00 )

5. 现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。
使用web_reg_save_param函数手动建立关联
在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。
1. 要在哪里使用web_reg_save_param函数?
在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。

不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。
1. 在VuGen中点选【Vuser】>【Run-Time Settings】。
2. 点选【General】>【Log】。
3. 勾选【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。
4. 按下【OK】就可以执行脚本了。
执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第7行。
在脚本的第7行前插入一行空白行,然后输入
web_reg_save_param(“UserSession”,
“UserSession” 这个 “UserSession” 就是到时要使用的参数名称,建议给个有意义的名字。
注意:到这里整个web_reg_save_param函数还没完成。

2. 找出web_reg_save_param中要用到的边界
web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。
找出左边界字符串
再回到Execution Log中,选取动态数据前的字符串并且复制它。
这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含到特殊字符。
在这边我们选取「input type=hidden name=userSession value=」字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所以我们在Execution Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。
将这个边界字符串加到未完成的web_reg_save_param函数中:
web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,
找出右边界字符串
接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。
以这个例子来看,就是「>」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。
web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=>”, LAST);

将脚本中有用到关联的数据,以参数取代
当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。
范例:

“Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM,
换成
“Name=userSession”, “Value={UserSession}”, ENDITEM,

到这里您已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。
关于 web_reg_save_param 函数
对于关联(correlation)来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,透过设定的边界字符串,找出特定的数据并将其储存在一个参数中,以供后续脚本使用。
接下来将针对web_reg_save_param做比较详细的说明。
Service and registration type function
web_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联、设定proxy、提供认证信息等,当其作用时,不会对网页的内容做任何的修改。
web_reg_save_param同时也是一个registration type function (只要函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,则web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param找寻要做关联的动态数据并建立参数。
所以要记住一点,要使用registration type function时,要注意其放置的位置必须在要作用的action function之前。
语法
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:指定当找不到要找的动态数据时该怎么处置。
o Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。
o 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:可能的值有二种:
o HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式
o 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)的可能原因如下:
o 脚本是由VuGen 6.02或更早的版本所录制的
o 汇入的Action不会包含快照(snapshot)的档案
o 脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot)
o 某些步骤并不会产生快照(snapshot),如浏览某个资源
o 快照(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 scrīpt)还是要忽略(Ignore)。
另外你也可以勾选【Perform correlation in scrīpt】,让VuGen自动作关联,不会再跳出询问窗口。
或是勾选【Disable correlation engine】,关闭自动关联的功能。

• 如何手动启动「Scan action for correlation」的功能
要手动启动「Scan action for correlation」的功能,请先执行脚本一次后,点选【Vuser】>【Scan Action for Correlation】。

• 执行完脚本后并未出现【Scan Action for Correlation】窗口
要启用【Scan Action for Correlation】功能,请点选【Tools】>【General options】>【Correlation】tab,勾选【Show Scan for correlation popup after replay of Vuser】选项。

此文来源于51testing博客,转载请注明出处
原是连接:http://blog.51testing.com/?108993/action_viewspace_itemid_5980.html

上一页


站内搜索
相关文章
◎如何在脚本中做关联(一)
◎loadrunner监控apache2.X
◎LR中winsock协议Error: "10061 - Connection refused"的解决方法
◎QTP识别和操作对象的原理
◎用Schedule定时运行QTP脚本
◎LR中判断HTTP返回状态
◎关于终端仿真Legacy-Terminal Emulation(RTE)
◎TestDirector数据库迁移+升级
◎loadrunner监视linux服务器的安装与操作
◎用QTP录制时如何识别编辑框
◎QTP常见问题解答四
◎QTP常见问题解答三
◎QTP常见问题解答二
◎QTP常见问题解答一
◎学习loadrunner之一_事务
◎《自动化测试工具介绍QTP篇》——新手必看
◎校验对象是否存在object.exist
◎QTP与回归测试
◎QTP中一些基础代码结构累积
◎QTP中MS SQL SERVER数据库连接的一种简单方法
◎Object Repository 的合并
◎Mercury LoadRunner 8.1 使用前必读三
◎Mercury LoadRunner 8.1 使用前必读二
◎Mercury LoadRunner 8.1 使用前必读一
◎我来谈谈WinRunner和QTP的区别
◎winrunner 永久注册成功秘笈
◎td的邮件服务器配置成功
◎LoadRunner下DLL的调用
◎关于"RPC server is unavailable"的解决方案
◎QTP中虚拟对象设置
◎TD中Case的复用
◎中英文操作系统切换导致的找不到对象的解决方法
◎利用Analysis 分析结果
◎文件/表参数的数据分配和更新方法
◎QTP描述性编程原理介绍
◎对象库的管理与合并
◎QTP的学习历程
◎LoadRunner学习——LoadRunner的安装
◎解决回放时浏览器乱码问题
◎TD与QTP连接
◎QTP中的描述性编程
◎测试结果报告知多少
◎QTP中设置共享对象库
◎设定时间让脚本自动运行
◎如何在QTP中使用IE以外浏览器录制和运行测试?
◎QTP中调用共享文件
◎如何使用qtp检查网页中显示的文字颜色为指定的颜色
◎LoadRunner使用虚拟IP测试流程
◎QTP中的步骤生成器
◎Robot GUI脚本操作SQL SERVER数据库
热门文章
◎主流测试工具介绍(1)
◎Winrunner经验总结
◎主流测试工具介绍(2)
◎主流测试工具介绍(3)
◎Winrunner TSL命令简介(一)
◎WinRunner的问题整理
◎LoadRunner监视的性能计数器
◎四款主流测试工具的测试流程
◎Loadrunner中参数的设置
◎LoadRunner的一个解决方案
◎让LoadRunner走下神坛
◎WinRunner 脚本标准格式
◎WinRunner如何实现自动化测试
◎LoadRunner简化国泰航空测试流程
◎jboss tomcat weblogic websphere 性能对比测试
◎利用loadrunner测试ORACLE存储过程的性能
◎Winrunner TSL命令简介(四)
◎Winrunner TSL命令简介(二)
◎LoadRunner函数介绍
◎使用LoadRunner测试TUXEDO
◎TestDirector项目数据迁移完整过程
◎关于"RPC server is unavailable"的解决方案
◎Winrunner TSL命令简介(三)
◎使用Winrunner进行性能测试
◎WinRunner使用经验介绍
◎LoadRunner本机录制http协议程序遇到的问题以及解决方法
◎TD7.6 字段中英文对照表
◎Winrunner Context Sensitive命令列表
◎TD中Case的复用
◎MI测试工具介绍
◎对脚本的建议
◎QTP的学习历程
◎QTP的登陆脚本设计
◎LoadRunner学习——LoadRunner的安装
◎如何用QTP解析PDF
◎QuickTestPro SP考试心得
◎loadruner报错:Step download timeout(120 seconds)的解决方法
◎winsock协议错误编码解析
◎TD 7.x 升级到 TD 8.0 的一些经验(SQLSERVER 下)
◎高级测试管理的工具和技术
◎Mercury LoadRunner 8.1 使用前必读三
◎ERP功能测试最佳实践:10个步骤确保ERP系统的可靠性
◎QuickTestPro中的快捷键
◎使用LoadRunner来测试BEATUXEDO (LoadRunner 7.6)
◎Mercury LoadRunner 8.1 使用前必读一
◎LoadRunner函数介绍续
◎winsock的buffer简单解析
◎我来谈谈WinRunner和QTP的区别
◎何谓 Keyword-Driven Testing?
◎QTP的登陆脚本设计

Google提供的广告