51Testing软件测试论坛

标题: 关于lr_xml_get_values返回个数的问题 [打印本页]

作者: keome    时间: 2010-8-11 20:17
标题: 关于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
先判断有几个,然后取最后一个就行了嘛
作者: keome    时间: 2010-8-11 20:27
不知说清楚没有,其是我就是想遍历下匹配出来的Result
自己顶顶~
作者: keome    时间: 2010-8-11 20:35
标题: 回复 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
因为参数这个东西不是数组,如果是数组的话,可以
int str[10];
...
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
int number;
        char Result[10];
    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
标题: 回复 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
标题: 回复 7# 的帖子
lr_paramarr_idx  应该只有9.x 以上的版本才有的
作者: dionysus    时间: 2010-8-12 10:12
标题: 回复 7# 的帖子
这个函数挺好的,以前没注意到,学习了
作者: keome    时间: 2010-8-12 11:34
标题: 回复 8# 的帖子
确实是只到9.x上的版本才有
作者: higkoo    时间: 2010-8-12 22:34
标题: 慎用lr_xml_*
发现 lr_xml_* 函数本身比较占资源,可能影响测试结果:
http://hi.baidu.com/higkoo/blog/ ... f0bff699250ad7.html

然后我用C实现了一套字符串查找的函数:
http://hi.baidu.com/higkoo/blog/ ... f8d6868c5430b1.html
作者: darling_god    时间: 2010-8-24 10:01
搬个板凳等
作者: daiheyun    时间: 2011-5-16 14:33
好象这样可以,lr_output_message(lr_eval_string("{Result_3}"));
作者: 英英    时间: 2014-12-9 12:55
学习了、、、
作者: 英英    时间: 2014-12-9 12:59
楼主 知道怎么随机取: "ValueParam=Result"里面的值吗?lr_paramarr_dondom好像不行啊!

我想的办法是:取一个随机数,然后用:     lr_output_message(lr_paramarr_idx("Result", i));
作者: 英英    时间: 2014-12-9 13:04
楼主 知道怎么随机取: "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));




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