关联—性能测试进阶指南 LoadRunner 11实战(第二版)

发表于:2015-1-19 12:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈霁、李锋、王臣钧    来源:51Testing软件测试网原创

(51Testing软件测试网获得作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  对于图片和CSS等内容其实一般都不是我们关心的,系统的动态数据需要关联的服务器返回信息一般都保存在HTML正文中。所以接着修改一下关联函数,将Content Type选项修改为text/html,也就是只需要关联返回数据类型为text/html的内容而不关联其他的信息。关联函数变为如下形式:
  web_reg_save_param_ex(
  "ParamName=temp",
  "LB=",
  "RB=",
  "Ordinal=1",
  SEARCH_FILTERS,
  "ContentType=text/html",
  LAST);
  再运行一次可以看到被关联的内容只有一个,而且就是服务器返回的HTTP包中的正文内容,与通过VuGen的HTTP View模式下HTTP Flow看到的服务器第二个返回内容完全相同,现在这个返回是保存在一个叫作temp的参数中。
  在得到了服务器返回的内容后,接着就可以做任何想做的事情,比如获得页面中的任意一个对象。例如,如何将XAMPP首页上的You have successfully installed XAMPP on this system!这段话抓出来作为参数呢?
  关联函数提供了一个叫作左边界、右边界的策略,只需要填写这个规则,它会在整个被关联范围内查找符合该规则的内容。先查看需要关联的内容的对应代码。
  <h1>Welcome to XAMPP for Windows!</h1>
  <b>Congratulations:<br>You have successfully installed XAMPP on this system!</b><p>
  在服务器返回的内容中,可以找到需要获取的这句话,那么什么样的边界条件能够让我们获取这个词呢?可以通过设置左边界为Congratulations:<br>,右边界为</b><p>的方式来检索这个词,然后修改关联函数。
  修改关联函数有以下两种方法:
  直接在代码上修改。
  切换到Tree模式下,双击关联函数,在Left Boundary/Right Boundary中输入条件,修改关联函数,如图A.116所示。
  
图A.116  修改关联函数的左右边界
  确认后得到新的关联函数:
  web_reg_save_param_ex(
  "ParamName=temp",
  "LB=Congratulations:<br>",
  "RB=</b><p>",
  "Ordinal=1",
  SEARCH_FILTERS,
  "ContentType=text/html",
  LAST);
  现在再运行一下整个脚本,在日志中可以看到想要的这个词被成功地关联出来,并且保存到了参数temp中。
  Action.c(13): Notify: Saving Parameter "temp = You have successfully installed XAMPP on this system!".
  为什么我们不写左右边界只能看到一个XAMPP首页Frame的代码返回,而写了左右边界后却能看到符合边界的我们要的字符串呢?在HTTP模式下,请求会逐层解析,但是关联函数的返回并不能将层层的返回都保存在一个参数中,所以在默认显示中就只出现了第一个服务器200状态请求的返回。但当填写边界后,关联函数会自动对后续的HTML请求做层层过滤,留下符合条件的内容。
  接着可以通过lr_eval_string函数将temp值提取出来并输出,或者提供给后面需要使用该值的函数。关联函数的结果需要请求结束后才能获得,所以提取关联结果参数的值必须在请求后,而关联函数必须在请求前。
  由于我们在访问请求前设置规则,服务器返回的动态内容都会被关联函数捕捉并且保存到参数中,这样就实现了对动态数据的捕获,通过后期处理过程,即可完成对于动态对象的操作功能。
  通常情况下我们使用关联的步骤流程如图A.117所示。
  
图A.117 关联步骤流程
  简单地说,关联就是对服务器的返回做处理的过程,刚才我们使用的是手动关联,而关联其实有3种方式:
  自动关联
  手动关联
  一边录制一边关联
  A.7.2  自动关联
  首先来看最简单的自动关联。自动关联是VuGen提供的自动扫描关联处理策略,它的原理是对同一个脚本运行和录制时的服务器返回进行比较,来自动查找变化的部分,并且提示是否生成关联。
  打开Phpwind论坛,录制一个以普通用户登录后发帖的用户行为再回放,通过Test Results界面可以看到回放虽然没有提示错误,但是并没有正确完成我们录制的用户行为,系统提示非法请求(如果没有出现这个错误,那么将代码中登录的用户名切换一下就可以看到这个结果了),如图A.118所示。
  图A.118  Phpwind85发帖失败
  问题就出在脚本中web_submit_data()函数的_hexie和verify两个属性( web_submit_ form()函数会自动处理hide属性,在某些情况下会自动回避动态数据验证的问题)。
web_submit_data("post.php",
"Action=http://localhost:8000/phpwind85/post.php?fid=6&nowtime=1316158627283&verify=60cc839c",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/xml",
"Referer=http://localhost:8000/phpwind85/post.php?fid=6",
"Snapshot=t5.inf",
"Mode=HTML",
ITEMDATA,
"Name=magicname", "Value=", ENDITEM,
"Name=magicid", "Value=", ENDITEM,
"Name=verify", "Value=60cc839c", ENDITEM,
"Name=cyid", "Value=0", ENDITEM,
"Name=ajax", "Value=1", ENDITEM,
"Name=iscontinue", "Value=0", ENDITEM,
"Name=atc_title", "Value=发帖测试", ENDITEM,
"Name=atc_content", "Value=测试发帖", ENDITEM,
"Name=atc_usesign", "Value=1", ENDITEM,
"Name=atc_autourl", "Value=1", ENDITEM,
"Name=atc_convert", "Value=1", ENDITEM,
"Name=digest", "Value=0", ENDITEM,
"Name=topped", "Value=0", ENDITEM,
"Name=replayorder", "Value=0", 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=6", ENDITEM,
"Name=tid", "Value=0", ENDITEM,
"Name=article", "Value=0", ENDITEM,
"Name=special", "Value=0", ENDITEM,
"Name=_hexie", "Value=9756c0e9", ENDITEM,
LAST);
  这里的_hexie和verify是在每次访问网站时系统提供的随机字符串,用来区分不同的用户,在回放时由于发送了这两个属性导致脚本回放失败。几乎绝大多数脚本回放失败都是因为关联的问题。现在单击Vuser菜单中的Scan Script for Correlations选项。
本文选自《性能测试进阶指南—LoadRunner 11实战(第二版)》,本站经作者的授权。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号