在用户登录或者访问受限资源时候,往往会遇到重定向,在这种情况下,LoadRunner的一个Trasaction会包括两个甚至多个请求,如何拆分呢?
使用如下配置(LR12.5提供了JS的方式写Web-HTTP/HTML脚本了,妈妈再也不用担心我得一看C就会吐的病了):
web.setOption("MaxRedirectionDepth", "0");
然后写一个循环
lr.saveString('http//redirect.com','location');
var httpResult ="";
var i = 0;
web.setOption("MaxRedirectionDepth", "0", "LAST");
do {
lr.message("Start---->");
web.regSaveParamEx({
paramName : 'httpCode',
lb : 'HTTP/1.1 ',
rb : ' ',
notFound : 'warning',
scope : 'Headers'
});
web.regSaveParamEx({
paramName : 'location',
lb : 'Location: ',
rb : '\r\n',
notFound : 'warning',
scope : 'Headers'
});
var transactionName ='tt'+i;
lr.message(transactionName);
lr.startTransaction(transactionName);
lr.message("Visiting URL: " + reqURL);
web.url({
name : 'idm' + i,
url : '{location}',
recContentType : 'text/html'
});
lr.message("Redirect URL is: " + lr.evalString("{location}"));
httpResult = lr.evalString("{httpCode}");
lr.endTransaction(transactionName, lr.AUTO)
i++;
lr.message("END<----");
} while (httpResult == "302");
原理就是一旦发现HTTP response code 是302,就去解析response header,找出要跳转的地方保存下来,循环去做就可以了。
另外 使用如下API可以直接获取上一次HTTP请求的返回code,不用每次都去匹配解析一下:
web.getIntProperty(web.HTTP_INFO_RETURN_CODE);
再另外, LR12.5对JS代码: web.setOption("MaxRedirectionDepth", "0")的解析是有问题,昨天刚询问了LR Team,是一个JS的支持上的问题,JS只是外面一层皮,里面的实现实际上还是调用的C的东西,结果在实现这个API的时候出现了BUG。
在API实现上仅支持了
web.setOption("MaxRedirectionDepth", "0","LAST")这种方式。