keome 发表于 2010-8-11 20:17:00

关于lr_xml_get_values返回个数的问题

有这样一段代码

char *xml_input =
   "<employee>"
      "<name>Mike</name>"
      "<name>John</name>"
      "<name>Lie</name>"
   "</employee>";

Action() {
         lr_save_string(xml_input, "XML_Input_Param");
         lr_xml_get_values("XML={XML_Input_Param}",
                        "ValueParam=Result",
                        "Query=/employee/name",
                        "SelectAll=Yes",
                        LAST);
}

因为在lr_xml_get_values中指定了SelectAll=Yes,所以Result_1 = Mike, Result_2 = John, Result_3 = Lie
lr_xml_get_values返回值会是3,也就是说匹配到了3个值

问题是:
我现在想输出最后一个结果,该怎么办(由于xml_input不是固定的,结果未必匹配到3个),
我知道肯定不能这么写lr_output_message(lr_eval_string("{Result_#}"));
那该怎么写呢? 谢谢大家!

msnshow 发表于 2010-8-11 20:27:03

先判断有几个,然后取最后一个就行了嘛

keome 发表于 2010-8-11 20:27:32

不知说清楚没有,其是我就是想遍历下匹配出来的Result
自己顶顶~

keome 发表于 2010-8-11 20:35:19

回复 2# 的帖子

比如说:
len =lr_xml_get_values("XML={XML_Input_Param}",
                        "ValueParam=Result",
                        "Query=/employee/name",
                        "SelectAll=Yes",
                        LAST);
len中存的就是有多少个
那我总不能写成
lr_output_message(lr_eval_string("{Result_len}"))吧?

我该怎么写呢?

keome 发表于 2010-8-11 20:39:33

因为参数这个东西不是数组,如果是数组的话,可以
int str;
...
for (int i = 0; i < 10; i ++)
    printf("%d", str);

由于这个是参数,所以无法写成

for (int i = 0; i < 10; i ++)
    printf("%d", Result_i);

那我要遍历的话该怎么做呢?谢谢了

dionysus 发表于 2010-8-11 21:34:12

int number;
        char Result;
    char *xml_input =
   "<employee>"
      "<name>Mike</name>"
      "<name>John</name>"
      "<name>Lie</name>"
   "</employee>";


         lr_save_string(xml_input, "XML_Input_Param");
         number = lr_xml_get_values("XML={XML_Input_Param}",
                        "ValueParam=Result",
                        "Query=/employee/name",
                        "SelectAll=Yes",
                        LAST);

               lr_output_message("the number is: %d",number);

               sprintf(Result,"{Result_%d}",number);

               lr_output_message("the last result is: %s",lr_eval_string(Result));

定义一个数组,最好足够长,然后用sprintf函数就成了,以前的项目里我是这样做的。

keome 发表于 2010-8-12 09:17:00

回复 6# 的帖子

非常感谢,这种方法确实很好用!

自己也找了些资料,也可以通过下面的方式解决(纯LoadRunner方法)大家可以查查lr_paramarr_idx函数和相关函数
       len = lr_xml_get_values("XML={XML_Input_Param}",
                                        "ValueParam=Result",
                                        "Query=/employee/name",
                                        "SelectAll=Yes",
                                        LAST);
       for (i = 1; i <= len; i ++) {
               lr_output_message(lr_paramarr_idx("Result", i));
       }

skyzhu 发表于 2010-8-12 09:32:43

回复 7# 的帖子

lr_paramarr_idx应该只有9.x 以上的版本才有的

dionysus 发表于 2010-8-12 10:12:39

回复 7# 的帖子

这个函数挺好的,以前没注意到,学习了:)

keome 发表于 2010-8-12 11:34:48

回复 8# 的帖子

确实是只到9.x上的版本才有

higkoo 发表于 2010-8-12 22:34:20

慎用lr_xml_*

发现 lr_xml_* 函数本身比较占资源,可能影响测试结果:
http://hi.baidu.com/higkoo/blog/item/b4ba5a29b3f0bff699250ad7.html

然后我用C实现了一套字符串查找的函数:
http://hi.baidu.com/higkoo/blog/item/b95fcf5166f8d6868c5430b1.html

darling_god 发表于 2010-8-24 10:01:16

搬个板凳等

daiheyun 发表于 2011-5-16 14:33:47

好象这样可以,lr_output_message(lr_eval_string("{Result_3}"));

英英 发表于 2014-12-9 12:55:56

学习了、、、:lol

英英 发表于 2014-12-9 12:59:47

楼主 知道怎么随机取: "ValueParam=Result"里面的值吗?lr_paramarr_dondom好像不行啊!

我想的办法是:取一个随机数,然后用:   lr_output_message(lr_paramarr_idx("Result", i));

英英 发表于 2014-12-9 13:04:49

楼主 知道怎么随机取: "ValueParam=Result"里面的值吗?lr_paramarr_random好像不行啊!

lr_paramarr_random函数为什么不行啊?
报错信息:Action.c(59): Warning: The string 'Result_count' with parameter delimiters is not a parameter.Result是我xml关联出来的参数数组名。

我想的办法是:取一个随机数,然后用:   lr_output_message(lr_paramarr_idx("Result", i));
页: [1]
查看完整版本: 关于lr_xml_get_values返回个数的问题