关联数组

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&amp;tid=22&amp;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\" onclick=\"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\" onclick=\"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++;
}

你可能感兴趣的:(数组)