LoadRuner脚本开发之关联的原理

发表于:2022-4-24 09:54

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

 作者:佚名    来源:知乎

  摘要:在学习关联之前必需清楚两个问题,一是:什么情况下需要关联?二是:LoadRunner使用关联函数进行关联时,关联函数是如何获得这些动态数据的,即关联函数的工作原理?
  第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图所示。
  第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图所示。
  第一步:进入登录界面,输入用户名和密码进行登录。
  第二步:服务器向客户端返回一个Session ID值。
  第三步:客户端向服务发送请求,在发送请求给服务器时,同时会向服务器发送一个Session ID,这个Session ID就是第二步从服务器返回到客户端的Session ID值,并且第二步和第三步的Session ID必须完全一样,否则发送到服务器端的请求将失败。
  第四步:服务器返回数据给客户端。
  在脚本录制过程中可以正确的登录,没有任何问题,但在回放脚本时发现并没有被正确的登录,那么这是什么原因呢?
  再仔细分析整个登录过程,注意第三步,第三步要求提交的HTTP请求中必须包括Session ID值,并且这个Session ID值一定是服务器返回给客户端的。在录制时,LoadRunner会将服务器返回的Session ID值保存在脚本中,脚本内容如下:
  web_submit_data("login.pl",
  "Action=http://127.0.0.1:1080/WebTours/login.pl",
  "Method=POST",
  "RecContentType=text/html",
  "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
  "Snapshot=t9.inf",
  "Mode=HTTP",
  ITEMDATA,
  "Name=userSession", "Value=108993.054434994fzAzDDApcDHfDDzDHpQiVtcf", ENDITEM,
  "Name=username", "Value=test1", ENDITEM,
  "Name=password", "Value=1", ENDITEM,
  "Name=JSFormSubmit", "Value=off", ENDITEM,
  "Name=login.x", "Value=51", ENDITEM,
  "Name=login.y", "Value=8", ENDITEM,
  LAST);

  从服务器端返回的Session ID(108993.054434994fzAzDDApcDHfDDzDHpQiVtcf)值保存在userSession参数中,那么当脚本进行回放时,客户端就一直使用这个Session ID并和其它的请求一块发送到服务器。这个过程其它并没有任何问题,但是服务器为了出于安全性考虑,每次返回给客户端的Session ID都会发生变化,而在整个请求过程中的第三步明确要求,客户端发送的请求必须同时附加上Session ID,并且一定需要与服务器返回的Session ID值一致,这样问题就出现了,每回放一次脚本时,服务器返回的Session ID值就发生改变,而脚本又将Session ID值写成了固定值,这样直接导致脚本回放失败。
  通过上面的例子可以看出,如果录制脚本过程中,服务器会返回一个动态的、变化的值给客户端时,那么就必须对脚本进行关联,否则业务不可能正常的完成。
  第二个问题,LoadRunner关联原理。
  在第一个问题中描述了什么情况下需要对脚本进行关联,这样就引出了另外一个问题,既然需要关联的内容是一个动态的、变化的,并且一定是服务器返回给客户端的值,那么LoadRunner又如何能获得这些动态的值呢?也即是接下来要分析的LoadRunner的关联原理。
  对于这些动态的值,如果想直接获得是不可能的,因为它是变化的,所以不可能直接获得每次回放时现成的值。这样就必须使用其它的方法来获得这串变化的值,先看生活中的一个例子,读者朋友应该都经历过军训,早上开始军训时,教官会先让大家报数,如果报数发现少人了,教官问会大家旁边是谁还没有到,注意这个案例中,教官其实根本不知道是谁没到,但是只要这未到的这个人左右两边的人都到了,那就一定可以知道是谁没到,所以同理LoadRunner也可以使用这种方法来获得那串动态的值,虽然不能直接去读到那串动态的值,但如果能找到左右边界的内容,那么同样可以获得那串变化的值。
  所以LoadRunner关联是通过左右边界值来查找服务器返回给客户端的值,所以关联最难的是如何查找待关联值的左右边界值。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号