LoadRuner脚本开发之关联的原理
摘要:在学习关联之前必需清楚两个问题,一是:什么情况下需要关联?二是: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关联是通过左右边界值来查找服务器返回给客户端的值,所以关联最难的是如何查找待关联值的左右边界值。
页:
[1]