在使用loadrunner录制脚本后,进行回放时,会出现session已经失效的情况,为解决这个问题,就应该将请求中的userSession进行参数化,使其自动获得当前的userSession,具体脚本如下:
在我们打开连接时,首先我们会向服务器发出一个访问的请求,服务器会返回我们所请求的页面,在返回的响应中,就包含了此次回话的userSession,
如图所示,我们这次会话的userSession就为133217.759335763zifcDiiptQfiDDDDtVVVtpDDAQHf
如此依赖,我们只需要将这串userSession拿到,再向服务器发送请求时,将这串userSession放在请求中,这样就不会出现session失效的情况了
这样的问题就是如何拿到这串userSession,我们可以用web_reg_save_param()函数,这个函数可以在返回的请求中查找到我们所需要的东西
web_reg_save_param(“usersession”,“LB=userSession” value=“”,“RB=”/>",LAST);
在这串代码中,usersession是我们给拿到的数据起的变量名,第二个参数LB和第三个参数RB分别是左边界和有右边界,这个函数可以返回LB与RB之间的数据,并将其赋值给usersession
当然,要注意使用转义字符
然后将登录脚本发送的请求中的对应的值替换成{usersession}就可以了
//打开连接脚本
open_index()
{
web_reg_save_param("usersession","LB=userSession\" value=\"","RB=\"/>",LAST);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/cgi-bin/welcome.pl?signOff=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/index.htm",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
return 0;
}
//登陆脚本
submit_login()
{
lr_think_time(1);
web_reg_find("Text=Welcome, {username}","saveCount=loginflag",LAST);
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/cgi-bin/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home",
"Snapshot=t2.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={usersession}", ENDITEM,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value=123", ENDITEM,
"Name=login.x", "Value=60", ENDITEM,
"Name=login.y", "Value=12", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
LAST);
if(atoi(lr_eval_string("{loginflag}"))>0){
lr_output_message("登陆成功,%s",lr_eval_string("{username}"));
return 0;
}
else{
lr_output_message("登陆失败,%s",lr_eval_string("{username}"));
return -1;
}
}