问题:项目使用了Ajax技术,有些请求的参数巨多,主要是一些坐标对,对于跨域访问,使用了jsonp协议,但是发送请求使用Get方式,就会对请求长度有限制,浏览器在处理这种超过最大限制的请求时,是将一个请求分为两部分,相当于发两次请求。loadrunner在录制时,忠实地将这两个请求记录为两个web_url。记录下来的脚本如下所示:
web_url("commonhandler_4",
"URL=http://www.mydomain.com/iserver/commonhandler?mapName=【。。。。此处省去若干参数串】§ionCount=2§ionIndex=0&jsonpUserID=1305099187125",
"Resource=0",
"Referer=http://www.mydomain.com/map/",
"Mode=HTTP",
LAST);
web_url("commonhandler_5",
"URL=http://www.mydomain.com/iserver/commonhandler?method=Search&t=1305099187125&jsonp=sm_callbacks[13050991871255502]§ionCount=2§ionIndex=1&jsonpUserID=1305099187125",
"Resource=0",
"Referer=http://www.mydomain.com/map/",
"Snapshot=t336.inf",
"Mode=HTTP",
LAST);
这个脚本在重放时,虽然显示成功,但是却得不到返回结果,而且服务器端也没有接收到请求,结果日志如下:
Starting iteration 1.
Warning -27077: The "vuser_init" section contains web function(s) when the "Simulate a new user on each iteration" Run-Time Setting is ON. This may produce unpredictable results with multiple iterations [MsgId: MWAR-27077]
Starting action Action.
Action.c(6): web_url("commonhandler_4") was successful, 0 body bytes, 102 header bytes [MsgId: MMSG-26386]
Action.c(16): web_url("commonhandler_5") was successful, 0 body bytes, 102 header bytes [MsgId: MMSG-26386]
Ending action Action.
考虑一下,觉得问题应该和这个一个请求,分两个web_url有关系,每一个url都是不完整的。试过很多种方法后,最后总算找出一个行得通的方案:
两个请求合并为一个请求,这个请求中包含两个请求的参数,去掉jsonp相关的参数,和web服务器用来识别分段请求的两个参数sectionCount、sectionIndex。只保留服务器应用程序中用到的参数。这样,重放成功,服务端也得到了完整的请求。
这种方法为什么能行得通,还是一头雾水,看来还需要对loadrunner、浏览器对于http协议的支持继续深入研究。