使用自动关联前,脚本必须要先运行一次。
LR11提供了全新的Correlations studio,在较长的时间等待后,我们会看到,VuGen已经识别出脚本中的动态内容,并询问是否需要关联,如图A.119所示。
图A.119 VuGen识别到可以自动关联动态数据
如果支持VuGen的选择,那么可以单击右侧的Correlate按钮将这个数据生成关联。单击Correlate按钮后,被关联的项目前多了一个绿色的小钩,这里将系统推荐需要关联的两项均确认关联。切回到Script模式看看脚本发生了什么变化,首先脚本中增加了以下内容:
//Correlation comment - Do not change! Original value='60cc839c' Name //='CorrelationParameter_1' web_reg_save_param_ex( "ParamName=CorrelationParameter_1", "LB= '", "RB=';var modeimg ", SEARCH_FILTERS, "Scope=Body", "RequestUrl=*/index.php*", LAST); //Correlation comment - Do not change! Original value='9756c0e9' Name //='CorrelationParameter_2' web_reg_save_param_ex( "ParamName=CorrelationParameter_2", "LB=document.FORM._hexie.value='", "RB=';\r\n</script", SEARCH_FILTERS, "Scope=Body", "RequestUrl=*/post.php*", LAST); |
这里多了两个关联函数,再看web_submit_data()函数:
web_submit_data("post.php_2", "Action=http://localhost:8000/phpwind85/post.php?fid=4&nowtime=1317710025796&verify={CorrelationParameter_1}", "Method=POST", "EncType=multipart/form-data", "RecContentType=text/xml", "Referer=http://localhost:8000/phpwind85/post.php?fid=4", "Snapshot=t8.inf", "Mode=HTML", ITEMDATA, "Name=magicname", "Value=", ENDITEM, "Name=magicid", "Value=", ENDITEM, "Name=verify", "Value={CorrelationParameter_1}", ENDITEM, "Name=cyid", "Value=0", ENDITEM, "Name=ajax", "Value=1", ENDITEM, "Name=iscontinue", "Value=0", ENDITEM, "Name=atc_title", "Value=web_formtest", ENDITEM, "Name=atc_content", "Value=testform", ENDITEM, "Name=atc_usesign", "Value=1", ENDITEM, "Name=atc_autourl", "Value=1", ENDITEM, "Name=atc_convert", "Value=1", ENDITEM, "Name=atc_money", "Value=0", ENDITEM, "Name=atc_credittype", "Value=money", ENDITEM, "Name=atc_rvrc", "Value=0", ENDITEM, "Name=atc_tags", "Value=", ENDITEM, "Name=step", "Value=2", ENDITEM, "Name=pid", "Value=", ENDITEM, "Name=action", "Value=new", ENDITEM, "Name=fid", "Value=4", ENDITEM, "Name=tid", "Value=0", ENDITEM, "Name=article", "Value=0", ENDITEM, "Name=special", "Value=0", ENDITEM, "Name=_hexie", "Value={CorrelationParameter_2}", ENDITEM, LAST); |
提交给服务器的_hexie和verify属性值,已经变成了前面关联获取的{Correlation Parameter_2}和{CorrelationParameter_1}参数。再次回放脚本,一切正确,进入系统。
自动关联是通过录制和回放时的服务器返回值比较来确定需要关联的内容,然后帮助生成对应的关联函数,常用在非常标准的动态数据处理中,例如Session ID。在大多数情况下脚本无法正常回放都可以通过自动扫描的方法来生成关联,解决动态数据的问题。
当希望将多次回放脚本的结果作为自动关联的比较参考时,可以切换脚本到Tree下的比较模式。然后单击View菜单中Snapshot下的Select Iteration选项,弹出如图A.120所示的窗口。
图A.120 设置选择测试结果的目录
将多次脚本回放的Result日志添加进来(这需要通过General Options中的设置每次运行Result重命名才能实现),这样做自动扫描关联就不仅比较录制和最后一次回放的服务器返回了。
但是自动关联有很强的局限性,无法实现特殊的动态数据捕获。例如,帖子的ID、作者名、某些表格单元值等,这时候就需要使用手动关联来解决它。
A.7.3 手动关联
手动关联是关联应用的最有效手段,通过手动关联函数web_reg_save_param_ex()将想要的字符串保存到一个参数中。通过关联可以捕获服务器返回的标题或正文的文本内容,也可以用来捕获服务器返回的超链接,比如需要获得Phpwind论坛首页搜索工具边的热搜关键字。
首先需要先分析一下热搜关键字的左右边界。打开源代码,可以发现热搜部分的代码如下所示:
<div class="s_tags">
<span class="s2">热搜:</span>
<a href="searcher.php?keyword=结婚&type=thread">结婚</a>
<a href="searcher.php?keyword=母婴&type=thread">母婴</a>
<a href="searcher.php?keyword=phpwind&type=thread">
phpwind</a>
<a href="searcher.php?keyword=testing001&type=thread">
testing001</a>
<a href="searcher.php?keyword=结婚&type=thread">结婚</a>
</div>
我们所需要的热搜关键字在两段地方出现,一个是在<a href="searcher.php?keyword=右边,&type=thread">左边的内容。另一个是在&type=thread">右边,</a>左边的内容。分别对这两种情况编写关联代码,代码如下(\为转义符):
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=<a href=\"searcher.php?keyword=",
"RB=&type=thread\">",
SEARCH_FILTERS,
LAST);
web_url("phpwind","URL=http://localhost:8000/phpwind85",LAST);
或者是这样:
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=&type=thread\">",
"RB=</a>",
SEARCH_FILTERS,
LAST);
web_url("phpwind","URL=http://localhost:8000/phpwind85",LAST);
设置日志显示,运行后即可获得热搜的第一个关键字。通常情况下关联的对象一般都选择链接地址而不是链接名,这样可以确保在以后的使用中比较简便。在LR11中提供了手工关联的加强,你可以在Tree View视图中HTTP View下Response Body中直接选择需要关联的内容右键创建关联完成。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。