51Testing软件测试论坛

标题: 如何 引用 web_reg_save_param 获得的值 ? [打印本页]

作者: higkoo    时间: 2007-10-16 11:01
标题: 如何 引用 web_reg_save_param 获得的值 ?
代码:
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 编辑 ]
作者: 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));
作者: higkoo    时间: 2007-10-16 11:16
原帖由 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

作者: sidneylover    时间: 2007-10-16 11:21
A没定义,你COPY的时候就把{}拷到A里了,再用LR_EVAL_STRING取值时就不用再写{}了
作者: higkoo    时间: 2007-10-16 11:24
原帖由 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+?+$佰


作者: higkoo    时间: 2007-10-16 11:29
标题: 将问题转移
修改提问方式,Maybe我的思路本身就是错的。

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

其实,本质问题在于:

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

如何 引用 web_reg_save_param 获得的值 ?
作者: Zee    时间: 2007-10-16 11:43
直接引用就行了。

上面,没有打印出来A指向的值是因为,你把它做为一个字符串了。这样取值,肯定是取不到的。
作者: cherubim    时间: 2007-10-16 11:50
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 编辑 ]
作者: higkoo    时间: 2007-10-16 11:55
原帖由 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}的最后一个值。
作者: Zee    时间: 2007-10-16 11:58
如果你每次都取最后一个值,你根本不需要这样做。
NewOrgID_count,取的就是长度。
即,这次是30,如果下次,你的数据增加了,NewOrgID_count取的值就是31.
作者: sidneylover    时间: 2007-10-16 11:59
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 编辑 ]
作者: higkoo    时间: 2007-10-16 12:09
原帖由 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是动态取出来的数组,然后又被动态读取。
作者: higkoo    时间: 2007-10-16 12:11
原帖由 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

动态引用就更深一筹了
作者: Zee    时间: 2007-10-16 13:26
不知道我是怎么理解的,看到你的描述后,还是觉得直接引用就可以了。
作者: Zee    时间: 2007-10-16 14:38
从你的描述来看,好像没有要取中间某个值,或者循环使用的意思。
作者: hellen_ma    时间: 2007-10-16 14:47
good good study
作者: higkoo    时间: 2007-10-16 15:00
原帖由 Zee 于 2007-10-16 14:38 发表
从你的描述来看,好像没有要取中间某个值,或者循环使用的意思。


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

将脚本贴出来了,添加了注释。
作者: Zee    时间: 2007-10-16 15:20
呵呵,我知道了,

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

下面给出一点代码提示:
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 编辑 ]
作者: higkoo    时间: 2007-10-16 15:43
标题: 哈哈,解决了!
就要这句:
sprintf( buffer, "{param1_%d}", j);        //把最后一个值放到buffer里去。

不知这个函数,脑子抓破估计也难招!
作者: Zee    时间: 2007-10-16 15:50
呵呵,这样的函数,在我的BLOG上,以前就有发过。
作者: haiquan180    时间: 2007-10-16 16:06
作个标记
作者: higkoo    时间: 2007-10-16 16:41
标题: 终于搞定了!
int i,j;
char *MyID[90],m[40];

for (i=10;i<100;i++) {
lr_save_int (i,"m");
web_submit_data(
  "Value={m}");
}
web_reg_save_param("IDS",
     "LB=value=\"",
     "RB=\"",
     "ORD=All",
     LAST);
web_url("GetTree")
j=atoi(lr_eval_string ("{IDS_count}"));
lr_output_message ("j=%d",j);
if (j>90) { j=90;}
for (i=1;i<=j;i++) {
sprintf(m,"{IDS_%d}",i);
MyID[i-1]=lr_eval_string (m);
lr_output_message ("i=%d,j=%d,m=%s,MyID[%d]=,%s",i,j,m,i-1,MyID[i-1]);
}
for (i=0;i<j;i++) {
lr_save_string (MyID,"SubID");
lr_output_message ("SubID=%s",lr_eval_string ("{SubID}"));
web_submit_data(
  "Value={SubID}");
}
作者: lasicarl    时间: 2007-10-16 18:18
dingding




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2