1)关联的定义
很多时候,当时录完之后,没有问题。过一段时间再跑脚本,就不会成功。比如session,过期了,再一次使用,就会出错。这个时候,需要在每次访问的时候动态的拿到session,这种情况就需要用到关联。
2)参数化和关联的区别的阐述
参数化变的是提交的东西。关联的值是从服务器响应中拿到
3)什么时候需要关联?
服务器返回的动态变化且对业务有影响的
关联小例子
演示WebTours登录时,如果总是用同一个session,可能登录不成功,需要对session关联。
Action() { web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t8.inf", "Mode=HTML", EXTRARES, "URL=http://www.bing.com/favicon.ico", ENDITEM, LAST); web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t9.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value=121391.541595788zcttAHHptcAiDDDDDHtztptztfcf", ENDITEM, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=54", ENDITEM, "Name=login.y", "Value=16", ENDITEM, LAST); web_url("SignOff Button", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "TargetFrame=body", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Snapshot=t10.inf", "Mode=HTML", LAST); return 0; }
找到usersession是从哪个页面返回的。
右键value的值添加关联。
关联后代码变化:
Action() { web_reg_save_param_ex( "ParamName=CorrelationParameter_1", "LB=userSession value=", "RB=>\n<table border", SEARCH_FILTERS, "Scope=All", "IgnoreRedirections=Yes", "RequestUrl=*/nav.pl*", LAST); web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t8.inf", "Mode=HTML", EXTRARES, "URL=http://www.bing.com/favicon.ico", ENDITEM, LAST); web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t9.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={CorrelationParameter_1}", ENDITEM, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=54", ENDITEM, "Name=login.y", "Value=16", ENDITEM, LAST); web_url("SignOff Button", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "TargetFrame=body", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Snapshot=t10.inf", "Mode=HTML", LAST); return 0; }
可运行成功。
关联位置,在请求之前。只要是web_reg开头的函数,是注册函数,都放在请求之前。
web_reg_save_param_ex(
"ParamName=参数名",
"LB=左边界",
"RB=右边界",
SEARCH_FILTERS,
"Scope=All", //搜索区域
All - Search the entire buffer
Headers - Search only the headers
Body - Search only body data
Cookies - Search only in cookies
"IgnoreRedirections=Yes", //忽略重定向。
"RequestUrl=*/nav.pl*",
LAST);
关联的其他方法:
自动关联(不推荐使用)
在运行时扫描脚本中的关联。(不建议使用)
集合点
1、集合点的概念:需要在某一点多个user同时执行。
2、解析集合点函数:
lr_rendezvous("test"); 只有在control里面起作用。
3、只能在action中添加集合点。不能添加到init和end
4、事务中添加集合点呢。如果不满足条件,会在集合点处停止,拉长事物响应时间。所以尽量不要添加到事务里面。