51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1225|回复: 0
打印 上一主题 下一主题

[原创] LoadRuner脚本开发之关联的原理

[复制链接]
  • TA的每日心情
    无聊
    5 小时前
  • 签到天数: 1043 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-4-25 13:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    摘要:在学习关联之前必需清楚两个问题,一是:什么情况下需要关联?二是:LoadRunner使用关联函数进行关联时,关联函数是如何获得这些动态数据的,即关联函数的工作原理?
      第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图所示。

    第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图所示。
      第一步:进入登录界面,输入用户名和密码进行登录。
      第二步:服务器向客户端返回一个Session ID值。
      第三步:客户端向服务发送请求,在发送请求给服务器时,同时会向服务器发送一个Session ID,这个Session ID就是第二步从服务器返回到客户端的Session ID值,并且第二步和第三步的Session ID必须完全一样,否则发送到服务器端的请求将失败。
      第四步:服务器返回数据给客户端。
      在脚本录制过程中可以正确的登录,没有任何问题,但在回放脚本时发现并没有被正确的登录,那么这是什么原因呢?
      再仔细分析整个登录过程,注意第三步,第三步要求提交的HTTP请求中必须包括Session ID值,并且这个Session ID值一定是服务器返回给客户端的。在录制时,LoadRunner会将服务器返回的Session ID值保存在脚本中,脚本内容如下:
    1. web_submit_data("login.pl",
    2.   "Action=http://127.0.0.1:1080/WebTours/login.pl",
    3.   "Method=POST",
    4.   "RecContentType=text/html",
    5.   "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
    6.   "Snapshot=t9.inf",
    7.   "Mode=HTTP",
    8.   ITEMDATA,
    9.   "Name=userSession", "Value=108993.054434994fzAzDDApcDHfDDzDHpQiVtcf", ENDITEM,
    10.   "Name=username", "Value=test1", ENDITEM,
    11.   "Name=password", "Value=1", ENDITEM,
    12.   "Name=JSFormSubmit", "Value=off", ENDITEM,
    13.   "Name=login.x", "Value=51", ENDITEM,
    14.   "Name=login.y", "Value=8", ENDITEM,
    15.   LAST);
    复制代码
    从服务器端返回的Session ID(108993.054434994fzAzDDApcDHfDDzDHpQiVtcf)值保存在userSession参数中,那么当脚本进行回放时,客户端就一直使用这个Session ID并和其它的请求一块发送到服务器。这个过程其它并没有任何问题,但是服务器为了出于安全性考虑,每次返回给客户端的Session ID都会发生变化,而在整个请求过程中的第三步明确要求,客户端发送的请求必须同时附加上Session ID,并且一定需要与服务器返回的Session ID值一致,这样问题就出现了,每回放一次脚本时,服务器返回的Session ID值就发生改变,而脚本又将Session ID值写成了固定值,这样直接导致脚本回放失败。
      通过上面的例子可以看出,如果录制脚本过程中,服务器会返回一个动态的、变化的值给客户端时,那么就必须对脚本进行关联,否则业务不可能正常的完成。
      第二个问题,LoadRunner关联原理。
      在第一个问题中描述了什么情况下需要对脚本进行关联,这样就引出了另外一个问题,既然需要关联的内容是一个动态的、变化的,并且一定是服务器返回给客户端的值,那么LoadRunner又如何能获得这些动态的值呢?也即是接下来要分析的LoadRunner的关联原理。
      对于这些动态的值,如果想直接获得是不可能的,因为它是变化的,所以不可能直接获得每次回放时现成的值。这样就必须使用其它的方法来获得这串变化的值,先看[url=]生活[/url]中的一个例子,读者朋友应该都经历过军训,早上开始军训时,教官会先让大家报数,如果报数发现少人了,教官问会大家旁边是谁还没有到,注意这个案例中,教官其实根本不知道是谁没到,但是只要这未到的这个人左右两边的人都到了,那就一定可以知道是谁没到,所以同理LoadRunner也可以使用这种方法来获得那串动态的值,虽然不能直接去读到那串动态的值,但如果能找到左右边界的内容,那么同样可以获得那串变化的值。
      所以LoadRunner关联是通过左右边界值来查找服务器返回给客户端的值,所以关联最难的是如何查找待关联值的左右边界值。


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 14:16 , Processed in 0.065530 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表