`
solem
  • 浏览: 34610 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

关联数组(转载)

 
阅读更多
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++;
}
分享到:
评论

相关推荐

    perl 程序开发教程

    六、从数组变量复制到关联数组 七、元素的增删 八、列出数组的索引和值 九、用关联数组循环 十、用关联数组创建数据结构 1、(单)链表 2、结构 3、树 第十章 格式化输出 一、定义打印格式 二、显示打印格式 三、...

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    C++面试中的常见问题转载

    - 当引用作为函数参数时,它提供了类似指针的功能,但更安全,因为它是强制关联的。 4. **引用作为函数参数**: 使用引用作为函数参数,可以避免值传递的开销,因为它们提供对原始对象的直接访问。这类似于指针,...

    MTK开发笔记个人总结版--转载

    - 整个移植过程涉及到多个文件的修改,如`SSCStringHandle.h`、`SSCStringHandle.c`和`PhoneSetup.c`,这反映了MTK平台中系统服务、语言设置和输入法集成的紧密关联性。 这篇笔记对MTK平台的开发环境配置、资源...

    转载 - 26本 Ruby/Rails 相关英文图书简评

    1. **Ruby 基础**:学习 Ruby 首先要掌握其基础语法,如变量、常量、数据类型(包括字符串、数组、哈希等)、控制结构(条件语句、循环)、方法定义和调用、类与对象、模块、继承和多态性等。 2. **元编程**:Ruby ...

Global site tag (gtag.js) - Google Analytics