关联数组(转载)

8 篇文章 0 订阅
4 篇文章 0 订阅
http://www.blogjava.net/xingcyx/archive/2007/10/22/155041.html


工具:LoadRunner11,系统WINDOS XP。被测系统:DISCUZ。
业务一:登录后,发表帖子,返回帖子列表,浏览刚才新增的帖子。
关注点:如何浏览刚才新增的贴子,而不是其他帖子。
关联点:浏览帖子的URL中连接的地址,在Response Boby中显示为
<link href="http://localhost/bbs/forum.php?mod=viewthread&tid=23" rel="canonical" />,将http://localhost/bbs/forum.php?mod=viewthread&tid=23关联即可。
业务二:登录后,在帖子列表,随机浏览帖子。
关注点:如何能随机的浏览帖子,并且记录下浏览的那个帖子。
关联点:在帖子列表的URL中,在Response Boby中显示为<a href="forum.php?mod=viewthread&tid=22&extra=page%3D1" nclick="atarget(this)" class="xst" >测试之任重道远</a>,只需关联tid=22即可。但是返回的应该是很多的关联,所以需要在关联函数中添加Ord=All,就能关联到所有的参数,存在参数数组中。
用for (i=1;i<=lr_paramarr_len("link");i++)
{
lr_output_message (lr_paramarr_idx ("link",i));
}
x=lr_paramarr_random ("link");
lr_save_string (x,"param");
达到随机取值,并且打印所有的关联到的参数。


2.2 获取参数数组

  前面的方法有一个缺点,它只能点击某个板块的第一个帖子。这显然不是我们想要的结果。我们想要结果是能够随机点击某个板块的一个帖子。这时需要用到参数数组。

  也就是执行 web_reg_save_param()函数的时候将某个板块首页的全部帖子的tid保存到一个参数数组中。脚本如下:

web_reg_save_param("topictid",
"LB=<a href=\"forum.php?mod=viewthread&tid=",
"RB=&extra=page%3D1\" οnclick=\"atarget(this)\" class=\"xst\" >",
"Search=NoResource",
"Notfound=warning",
"ORD=ALL",
LAST);
  对照可以看出,此处把ORD=1,修改为了ORD=ALL。

  修改后整体脚本如下:

viewtopic()
{

//用于记录参数数组的长度
int len;

//用于记录参数数组中随机取出的一个参数的值
char * topic;

//查找出所有帖子的的tid,并将此放入参数数组中
web_reg_save_param("topictid",
"LB=<a href=\"forum.php?mod=viewthread&tid=",
"RB=&extra=page%3D1\" οnclick=\"atarget(this)\" class=\"xst\" >",
"Search=NoResource",
"Notfound=warning",
"ORD=ALL",
LAST);


//进入某个版块
web_url("forum.php_3",
"URL=http://{IP}/bbs/forum.php?mod=forumdisplay&fid={fid}",
"Resource=0",
"RecContentType=text/html",
"Referer=http://{IP}/bbs/forum.php",
"Snapshot=t122.inf",
"Mode=HTML",
LAST);

//将数组长度的值赋值给len变量
len = atoi(lr_eval_string("{topictid_count}"));

//将参数数组中随机取出的一个值赋给topic变量
topic = lr_paramarr_random("topictid");

//将参数数组中随机取出的值保持为randomtopic参数
lr_save_string( topic,"randomtopic");
if( len == 0)
{
return 0;
}else
{

web_url("forum.php_4",
"URL=http://{IP}/bbs/forum.php?mod=viewthread&tid={randomtopic}&extra=page%3D1",
"Resource=0",
"RecContentType=text/html",
"Referer=http://{IP}/bbs/forum.php?mod=forumdisplay&fid=2",
"Snapshot=t125.inf",
"Mode=HTML",
EXTRARES,
"Url=static/image/common/share_btn.png", "Referer=http://{IP}/bbs/forum.php?mod=viewthread&tid=997&extra=page%3D1", ENDITEM,
"Url=static/image/common/midavt_shadow.gif", "Referer=http://{IP}/bbs/forum.php?mod=viewthread&tid=997&extra=page%3D1", ENDITEM,
"Url=static/image/common/fastreply.gif", "Referer=http://{IP}/bbs/forum.php?mod=viewthread&tid=997&extra=page%3D1", ENDITEM,
"Url=static/image/common/edit.gif", "Referer=http://{IP}/bbs/forum.php?mod=viewthread&tid=997&extra=page%3D1", ENDITEM,
LAST);

}





return 0;

}
  在此说明下参数数组。我们可以通过下面的方法生成一个参数数组。

lr_save_string("www.baidu.com","site_1");
lr_save_string("www.sina.com","site_2");
lr_save_string("www.163.com","site_3");
lr_save_string("www.qq.com","site_4");
lr_save_string("4","site_count");
  此时参数数组名为site,各个参数的名为site_1,site_2,site_3,site_4。在一个参数数组中,有一个参数用来记录参数数组的长度。即参数名_count。


需求:通过关联取得的ParamName参数可能存在多个值,需要对每个ParamName参数值进行处理
脚本:可通过3种不同的实现方式,将每个参数值作为HTTP请求内容发出

web_reg_save_param("ParamName",
"LB/IC=\"id\":\"OutputParameter.",
"RB/IC=\",\"",
"Ord=All",
"Search=Body",
"RelFrameId=1",
LAST);

...


Paramcount=atoi(lr_eval_string("{ParamName_count}")); //参数个数
i=1;
while (i<=Paramcount) {
sprintf(str,"{ParamName_%d}",i); //生成ParamName_i

//方法一:将变量转为参数,直接在请求中使用参数
lr_save_string(lr_eval_string(str),"Value"); //对每个参数进行处理
web_submit_data("FreeQueryServlet_24",
"Action=http://datasvr01:8081/freequery/FreeQueryServlet",
"Method=POST",
"RecContentType=text/html",
"Referer=http://datasvr01:8081/freequery/js/freequery/businessview/Preview.html",
"Snapshot=t27.inf",
"Mode=HTTP",
ITEMDATA,
"Name=className", "Value=ClientReportService", ENDITEM,
"Name=methodName", "Value=addNewParam", ENDITEM,
"Name=params", "Value=[\"{ClientID}\",\"OutputParameter.{Value}\",\"\"]", ENDITEM,
LAST);



//方法二:通过strcpy、strcat方式组织字符串,通过变量发送请求
strcpy(s,"Value=[\"{ClientID}\",\"OutputParameter.");
strcat(s,str);
strcat(s,"\",\"\"]");
web_submit_data("FreeQueryServlet_24",
"Action=http://datasvr01:8081/freequery/FreeQueryServlet",
"Method=POST",
"RecContentType=text/html",
"Referer=http://datasvr01:8081/freequery/js/freequery/businessview/Preview.html",
"Snapshot=t27.inf",
"Mode=HTTP",
ITEMDATA,
"Name=className", "Value=ClientReportService", ENDITEM,
"Name=methodName", "Value=addNewParam", ENDITEM,
"Name=params", s, ENDITEM,
LAST);


//方法三:通过sprintf格式化输出生成需要的字符串,通过变量发送请求
sprintf(s,"Value=[\"{ClientID}\",\"OutputParameter.%s\",\"\"]",str);
web_submit_data("FreeQueryServlet_24",
"Action=http://datasvr01:8081/freequery/FreeQueryServlet",
"Method=POST",
"RecContentType=text/html",
"Referer=http://datasvr01:8081/freequery/js/freequery/businessview/Preview.html",
"Snapshot=t27.inf",
"Mode=HTTP",
ITEMDATA,
"Name=className", "Value=ClientReportService", ENDITEM,
"Name=methodName", "Value=addNewParam", ENDITEM,
"Name=params", s, ENDITEM,
LAST);

i++;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值