51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8048|回复: 22
打印 上一主题 下一主题

[原创] 如何 引用 web_reg_save_param 获得的值 ?

[复制链接]
  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2007-10-16 11:01:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    代码:
    int a;
    char b[15],c[15];

    //保存所有一级机构的OrgID
    web_reg_save_param ("NewOrgID",
    "LB/BIN=orgID=",
    "RB/BIN=&module",
    "ORD=All",
    LAST);

    web_url("orgAction.struts",
    //这里可以获取一个XML文件,从中读取许多NewOrgID
    LAST);

    a = atoi(lr_eval_string ("{NewOrgID_count}"));
    itoa(a,c,10);//将a变为字符串存到c里面
    strcat(c,"}");
    strcpy(b,"{NewOrgID_");
    strcat(b,c);//将b和c连接起来
    lr_save_string (b,"A");

    lr_output_message ("a=%d,b=%s,c=%s,A=%s",a,b,c,lr_eval_string ("{A}"));
    lr_output_message ("{NewOrgID_30}=%s",lr_eval_string ("{NewOrgID_30}")
    lr_output_message ("Count: %d ,b: %s",atoi(lr_eval_string ("{NewOrgID_count}")),b);

    //新增子机构
    web_submit_data("orgAction.struts_1",
    //这里添加新的子机构,要用到NewOrgID
    LAST);

    输出:
    DepartMange.c(70): a=30,b={NewOrgID_30},c=30},A={NewOrgID_30}
    DepartMange.c(71): {NewOrgID_30}= FAA91FB17BB93F538A091330129F8323
    DepartMange.c(72): Count: 30 ,b: {NewOrgID_30}

    问题:
    已经读到了30个数据,取最后一个数据A是数据,且A={NewOrgID_30}。
    但是lr_eval_string ("{NewOrgID_30}"与lr_eval_string ("{A}")结果不一样。
    30在这里是已知的,运行后就是动态的,所以要使用参数A来传递。

    传递后A的输出并不是参数NewOrgID的值,错在哪里?

    [ 本帖最后由 higkoo 于 2007-10-16 15:04 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2007-10-16 11:11:40 | 只看该作者
    lr_output_message ("a=%d,b=%s,c=%s,A=%s",a,b,c,lr_eval_string ("{A}"));
    改成下面的试试
    lr_output_message ("a=%d,b=%s,c=%s,A=%s",a,b,c,lr_eval_string (A));
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
     楼主| 发表于 2007-10-16 11:16:28 | 只看该作者
    原帖由 sidneylover 于 2007-10-16 11:11 发表
    lr_output_message ("a=%d,b=%s,c=%s,A=%s",a,b,c,lr_eval_string ("{A}"));
    改成下面的试试
    lr_output_message ("a=%d,b=%s,c=%s,A=%s",a,b,c,lr_eval_string (A));


    不行的:
    DepartMange.c (70): undeclared identifier `A'
    DepartMange.c (70): type error in argument 1 to `lr_eval_string'; found `int' expected `pointer to char'
    d:\\program files\\mercury\\loadrunner\\scripts\\ipesbase\\\\combined_IpesBase.c (7): 2 errors, not writing pre_cci.ci
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2007-10-16 11:21:05 | 只看该作者
    A没定义,你COPY的时候就把{}拷到A里了,再用LR_EVAL_STRING取值时就不用再写{}了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    5#
     楼主| 发表于 2007-10-16 11:24:29 | 只看该作者
    原帖由 sidneylover 于 2007-10-16 11:21 发表
    A没定义,你COPY的时候就把{}拷到A里了,再用LR_EVAL_STRING取值时就不用再写{}了


    错误提示是A没有定义,A是使用 lr_save_string (b,"A");生成的参数,不是定义的变量。

    按你所说,将A定义为字符串型,输出结果为:
    DepartMange.c(70): a=30,b={NewOrgID_30},c=30},A=t+++J+?+?+J+?+?+J+J+.
    +?+p +0 +J+?+$佰

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    6#
     楼主| 发表于 2007-10-16 11:29:43 | 只看该作者

    将问题转移

    修改提问方式,Maybe我的思路本身就是错的。

    问题可能就出在 参数的值传递上。

    其实,本质问题在于:

    NewOrgID是web_reg_save_param 保存的参数,使用时和参数使用方法相似:
    {NewOrgID_1}、{NewOrgID_3}、……{NewOrgID_30}、……
    数组大小动态的,所以我先用{NewOrgID_count}读取总长度,然后取最后一个值。

    如何 引用 web_reg_save_param 获得的值 ?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2007-10-16 11:43:05 | 只看该作者
    直接引用就行了。

    上面,没有打印出来A指向的值是因为,你把它做为一个字符串了。这样取值,肯定是取不到的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2007-10-16 11:50:41 | 只看该作者
    A={NewOrgID_30},那么lr_eval_string ("{NewOrgID_30}"与lr_eval_string ("{A}")当然不一样的 
    lr_eval_string ("{A}")应该为lr_eval_string ("{{NewOrgID_30}}"
    所以应该把lr_eval_string ("{A}")改为lr_eval_string ("A")
    呵呵不知道对不对

    [ 本帖最后由 cherubim 于 2007-10-16 11:51 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
     楼主| 发表于 2007-10-16 11:55:00 | 只看该作者
    原帖由 Zee 于 2007-10-16 11:43 发表
    直接引用就行了。

    上面,没有打印出来A指向的值是因为,你把它做为一个字符串了。这样取值,肯定是取不到的。



    直接引用{NewOrgID_30}是可以

    后面的30,第一次运行是30,成功一次,列表里就多一条新数据,新数据是最后一个。

    敢问Zee版主:
    下次就应该是{NewOrgID_31},{NewOrgID_30}的后面的数字要怎样参数化呢?

    脚本里的:
    a = atoi(lr_eval_string ("{NewOrgID_count}"));
    itoa(a,c,10);//将a变为字符串存到c里面
    strcat(c,"}");
    strcpy(b,"{NewOrgID_");
    strcat(b,c);//将b和c连接起来
    lr_save_string (b,"A");

    实际上就是为了取{NewOrgID}的最后一个值。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2007-10-16 11:58:30 | 只看该作者
    如果你每次都取最后一个值,你根本不需要这样做。
    NewOrgID_count,取的就是长度。
    即,这次是30,如果下次,你的数据增加了,NewOrgID_count取的值就是31.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2007-10-16 11:59:54 | 只看该作者
    a = atoi(lr_eval_string ("{NewOrgID_count}"));
    strcpy(b,"{NewOrgID_");
    for(i=0;i<a;i++)
    {itoa(i,c,10);
    strcat(b,c);
    strcat(b,"}");
    lr_output_message(lr_eval_string(b));
    }
    定义i,应该能把所有值打印出来
    为什么要实现这句lr_save_string (b,"A");

    [ 本帖最后由 sidneylover 于 2007-10-16 12:03 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    12#
     楼主| 发表于 2007-10-16 12:09:31 | 只看该作者
    原帖由 Zee 于 2007-10-16 11:58 发表
    如果你每次都取最后一个值,你根本不需要这样做。
    NewOrgID_count,取的就是长度。
    即,这次是30,如果下次,你的数据增加了,NewOrgID_count取的值就是31.



    web_submit_data("orgAction.struts_1",
         "Name=remark", "Value={NewOrgID_30}", ENDITEM,
          LAST);

    发送Submit里包含NewOrgID参数,取最后一个值即“要将参数中的数值参数化”,
    使用{NewOrgID_count}=31,{NewOrgID_31}= 8a81960d15a5627a0115a6e81c830117。

    多个用户添加数据,Submit 中{NewOrgID_?}是动态获取的,难点就是web_reg_save_param是动态取出来的数组,然后又被动态读取。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    13#
     楼主| 发表于 2007-10-16 12:11:55 | 只看该作者
    原帖由 sidneylover 于 2007-10-16 11:59 发表
    a = atoi(lr_eval_string ("{NewOrgID_count}"));
    strcpy(b,"{NewOrgID_");
    for(i=0;i


    动态输出是可以做到:
    http://bbs.51testing.com/thread-93163-1-1.html

    动态引用就更深一筹了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2007-10-16 13:26:23 | 只看该作者
    不知道我是怎么理解的,看到你的描述后,还是觉得直接引用就可以了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2007-10-16 14:38:40 | 只看该作者
    从你的描述来看,好像没有要取中间某个值,或者循环使用的意思。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2007-10-16 14:47:41 | 只看该作者
    good good study
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    17#
     楼主| 发表于 2007-10-16 15:00:10 | 只看该作者
    原帖由 Zee 于 2007-10-16 14:38 发表
    从你的描述来看,好像没有要取中间某个值,或者循环使用的意思。


    多个虚拟用户操作,每个用户返回值都不一样,取每个返回值的最后一个数据。

    将脚本贴出来了,添加了注释。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2007-10-16 15:20:55 | 只看该作者
    呵呵,我知道了,

    你把数组的最后一个值取出来就可以了。

    下面给出一点代码提示:
    char buffer[128] = {0};                    //定义一个数组,注意长度看需要而定

    j=atoi(lr_eval_string("{param1_count}"));  //把数组长度取出来
       
    lr_output_message("the j is %d",j);        //这句不用解释吧
       
    sprintf( buffer, "{param1_%d}", j);        //把最后一个值放到buffer里去。
         
    lr_output_message("the conut is %s.",lr_eval_string(buffer));   //调用buffer就可以得到数组的最后一个值。

    [ 本帖最后由 Zee 于 2007-10-16 15:22 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    19#
     楼主| 发表于 2007-10-16 15:43:29 | 只看该作者

    哈哈,解决了!

    就要这句:
    sprintf( buffer, "{param1_%d}", j);        //把最后一个值放到buffer里去。

    不知这个函数,脑子抓破估计也难招!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2007-10-16 15:50:08 | 只看该作者
    呵呵,这样的函数,在我的BLOG上,以前就有发过。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 12:04 , Processed in 0.086317 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表