51Testing软件测试论坛

标题: 怎么随机取一个列表中的某一条数据 [打印本页]

作者: xuewei.sky    时间: 2009-11-17 17:37
标题: 怎么随机取一个列表中的某一条数据
需求背景:  在测试的时候,服务器端返回一个列表可能是多条数据,并且每次返回的数据了不一致,目前我每次能够取到数据的总量,由于自己不会怎么随机取,所以在脚本中写死了,始终取第一条数据,但是从实际中讲,这是不对的。

问题:怎么能随机的取这些其中的一条。


新手求助,多谢!
作者: xuewei.sky    时间: 2009-11-17 23:36
自己顶下,怎么没人给帮助的!
作者: 海盗    时间: 2009-11-18 14:52
可以录制到取系统某条数据的脚本吗,可以的话把这个条数参数化,取随机数字。。。
作者: 云层    时间: 2009-11-18 14:53
关联后用lr_paramarr_random()函数即可
作者: 断寒    时间: 2009-11-18 15:00
lr_paramarr_random()
这个是啥函数??
作者: 断寒    时间: 2009-11-19 16:14
这个问题怎么没下文了?
作者: xuewei.sky    时间: 2009-11-19 17:09
标题: 回复 3# 的帖子
因为每次取的数据条数不一致,这里如果在参数里统一做的话,那可能存在访问的数据部存在的想象,这其实又造成了一种错误。
作者: xuewei.sky    时间: 2009-11-19 17:11
标题: 回复 4# 的帖子
这个函数怎么用,随机值怎么设定;
我这里要求随机值必须是0——我的列表数据的条数;
作者: 海盗    时间: 2009-11-19 18:21
标题: 回复 7# 的帖子
那可以设置两个参数,一个参数是你的查询条件,一个是要取 的记录号,只要这个记录号不大于你的查询条件查出的最大记录就可以,这样不会出现访问不存在的记录的情况,呵呵,仅供参考。。。
作者: dennyqiang    时间: 2009-11-20 12:20
lr_paramarr_random()函数作用是:随机取得关联回来的参数数组的值。

附,何为参数数组:在使用web_reg_save_param函数时,当设置Ord=All时,关联返回的就是一个参数数组,在LR9.X的版本提供支持。参数数组中参数的名称变成了param_x (多了_x,x表示参数数组中的索引)
在8.X的版本中不提供该函数,所以要随机取得值需要使用到rand()函数和sprintf组合来构造出一个类似param_1的字符串作为参数的名称,例子如下:

以LR自带的webtours为例,启动后可练习如下代码:

web_reg_save_param("flightnumber",
                "LB/DIG=##/##/####>",
                "RB/ALNUMIC=<td align=^enter>",
                "Ord=ALL",
                LAST);

        web_submit_data("reservations.pl",
                "Action=http://localhost:1080/webtours/reservations.pl",
                "Method=POST",
                ITEMDATA,
                "Name=advanceDiscount", "Value=0", ENDITEM,
                "Name=depart", "Value=Denver", ENDITEM,
                "Name=departDate", "Value=11/29/2009", ENDITEM,
                "Name=arrive", "Value=London", ENDITEM,
                "Name=returnDate", "Value=11/30/2009", ENDITEM,
                "Name=numPassengers", "Value=1", ENDITEM,
                "Name=seatPref", "Value=None", ENDITEM,
                "Name=seatType", "Value=Coach", ENDITEM,
                "Name=.cgifields", "Value=roundtrip", ENDITEM,
                "Name=.cgifields", "Value=seatType", ENDITEM,
                "Name=.cgifields", "Value=seatPref", ENDITEM,
                "Name=findFlights.x", "Value=44", ENDITEM,
                "Name=findFlights.y", "Value=15", ENDITEM,
                LAST);

        b = lr_paramarr_len("flightnumber");

        for (w=0; w<b; w++) {
                lr_output_message(lr_paramarr_idx("flightnumber", w+1));
        }

        lr_output_message(lr_paramarr_random("flightnumber"));

// lr 8.x 使用,无非就是用sprintf拼出flightnumber_x这样的参数名字.
        for (w=0; w<atoi(lr_eval_string("{flightnumber_count}")); w++) {
                sprintf(str, "{flightnumber_%d}", w+1);
                lr_output_message(lr_eval_string(str));
        }




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