关闭

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

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

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

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

  A.7  关联
  A.7.1  关联原理
  先来模拟一个场景:我们去坐飞机,登机前需要在检票点出示机票,检票登机。那么检票人员会检查哪些东西呢?机票是否真实、航班是否正确等信息,验证通过即可登机。
  过了几天我们又去坐飞机,还是拿同样的一张票去登机,检票人员再一次核对信息,发现机票已经过期了,自然就不能成功登机了,那怎么才能顺利登机呢?可以通过伪造机票信息的方式来登机,首先去询问其他乘客的机票信息,然后将自己的机票涂改为他们的机票,最后使用涂改后的机票登机。
  在这里我们通过收集别人返回的信息,将提交给检票人员的数据修改为这些收集到的信息,从而满足登机的验证策略。在脚本中也存在大量类似的情况,录制的时候,服务器会给一个唯一的认证码来进行操作,当再次回放脚本的时候服务器会给一个全新的认证码,而脚本录制是死的,还是拿老的认证码提交,从而导致脚本执行失败。
  例如:常见系统中的登录功能,在登录后服务器会返回SessionID,登录后的操作都需要提交该SessionID确认身份。使用VuGen录制时,将会记录服务器返回的SessionID并且原封不动地在下一个请求中发给服务器,如图A.110所示。
  
图A.110  录制得到SessionlD
  等到回放的时候,服务器会在接收到用户名和密码后返回新的SessionID,而脚本仍然发送旧的SessionID给服务器,最终因SessionID错误,导致脚本回放失败,如图A.111所示。
  
图A.111  回放时SessionID 错误
  为了确保脚本回放的成功,我们需要获得服务器每次返回的动态SessionID,再将这个动态数据发回给服务器。而关联能够帮助我们将服务器返回的数据进行处理并保存为参数。
  简单一句话,就是"将服务器的返回按照一定规则过滤后存放到参数",这就是关联。
  如何获得服务器的返回数据呢?我们先来回顾一下VuGen是如何发出请求并如何接受返回数据的。录制一个XAMPP首页的代码,看一下发出的请求和服务器的返回是什么。根据HTTP规范,应该是给服务器发了一个Get请求,服务器返回HTML页面。录制完成后把脚本切换到Tree模式。在Tree模式下切换到web_url()函数,在右侧的HTTP View中可以看到该请求对应的请求交互,如图A.112所示。
  
图A.112  访问XAMPP首页的HTTP交互记录
  在Raw Data下的请求Request中列出了发送给服务器的请求数据包,而与请求对应的服务器返回就在右侧的Response中。关联的作用就是把服务器返回的Response内容保存为参数。关联是通过关联web_reg_save_param_ex()函数来实现的,这个函数可以帮助我们完成对服务器返回的保存操作(在LR11前我们的关联函数主要是web_reg_save_param,而现在我们使用加强过的web_reg_save_param_ex)。现在将关联函数添加在脚本中。
  Action()
  {
  //在请求前添加关联函数
  web_url("localhost:8000", "URL=http://localhost:8000/", LAST);
  return 0;
  }
  关联函数是一个注册型函数,需要告诉VuGen下一个请求返回是需要被处理的,所以该函数必须要写在请求前,否则就会提示无法获得关联结果的错误。这是绝大多数使用关联的新手最容易犯的错误。
  将鼠标移动到添加关联函数的地方,然后选择Insert菜单下的New Step选项。系统弹出Add Step窗口,在Find Function中输入web_reg_save_param_ex找到该函数,如图A.113所示。
  
图A.113  在Add Step中找到关联函数
  确定后弹出web_reg_save_param_ex关联函数设置窗口。这里先不解释各个选项的作用,按照以下规则填写,如图A.114所示。
  
图A.114  设置关联服务器返回的所有内容
  设置Parameter Name为temp,Ordinal为1,单击OK按钮,脚本变为下面的内容:
  Action()
  {
  web_reg_save_param_ex(
  "ParamName=temp",
  "LB=",
  "RB=",
  "Ordinal=1",
  SEARCH_FILTERS,
  LAST);
  //在请求前添加关联函数
  web_url("localhost:8000", "URL=http://localhost:8000/", LAST);
  return 0;
  }
  关联函数的作用是通过一种规则将服务器的返回保存到一个参数中,所以,为了看到参数的内容,应打开参数取值的日志选项。运行脚本查看日志,会看到大量的蓝色参数值罗列出来,如图A.115所示。为了方便浏览,也可以打开该日志文件output.txt查看明细。
  
图A.115  关联后服务器返回的参数内容
  每一句"Notify:Saving Parameter temp="后面都是被关联到的服务器返回的,我们会发现返回不止一条,一共有8次关联值被保存到了temp这个参数中。那么访问一个页面怎么会有那么多个关联值呢?
  根据对日志的具体分析会发现,被关联到的内容有以下几种:
  HTML
  CSS
  JavaScript
  JPEG、PNG、GIF
  回想和对比一下前面介绍的HTTP基础,能够发现访问一个页面,服务器会先返回页面HTML,再下载页面中调用的CSS、JavaScript和图片,而关联函数把这些内容都抓了下来,所以会得到如此多的关联内容,也就是说通过这个关联函数获得了服务器所有的返回内容。
本文选自《性能测试进阶指南—LoadRunner 11实战(第二版)》,本站经作者的授权。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号