51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3557|回复: 9
打印 上一主题 下一主题

[原创] LR中参数的捕获和传递(请大虾支招!)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2004-11-9 11:45:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LR的脚本经过编译后,实际上就是标准的C程序,以下是一个脚本的例子:
#include "lrun.h"
#include "vuser_init.c"
#include "NewMember.c"
#include "MemberForPusr.c"
#include "Main.c"
#include "vuser_end.c"


所以我们有了编写更灵活,更具控制性的脚本机会。在脚本中,可以把几个可以重复操作的Action写成函数,用Main.c来控制(注意,使用这种方法,必须按F4在Runtime Setting中将过程Action Delete掉,只留下Main Action),举例:
NewMember(char* FatherMember)
{
    MemberForPusr(FatherMember, "888888", MemberNum);
        return 0;
}
Main()
{
        lr_output_message("Main is loaded");
    NewMember("10786");//把Action  NewMember当函数调用了!!
        return 0;
}


这样就出现了一个问题,我们完全可以设置一些全局的变量,和一些过程变量进行灵活的参数设置,不过在测试Web程序时,参数化的输入一般是在LR中配置参数表,如下一个打开链接的操作,{}之间的参数是配置在当前Action的参数表中的:
        web_submit_form("pre_create.php",
                "Snapshot=t14.inf",
                ITEMDATA,
                "Name=Num", "Value={pusrcnt}", ENDITEM,
                "Name=ValidCode", "Value=0000", ENDITEM,
                "Name=x", "Value=39", ENDITEM,
                "Name=y", "Value=10", ENDITEM,
                LAST);

但是我们传递到函数中的参数不能用这种方法,我试了好几种方式,就是不能把我在程序中传递的参数para直接写在程序中:
            "Value=$para",不丁!
            "Value={para}",不丁!


后来终于找到了办法,把所有要传递的变量定义成字串char *,然后在LR的变量表中生成几个对应的空变量,用以下函数去传递:
   lr_save_string(lr_eval_string(Server), "Server");
    lr_save_string(lr_eval_string(Id), "id");
    lr_save_string(lr_eval_string(Password), "password");
    lr_save_string(lr_eval_string(PUsrCnt), "pusrcnt");

lr_save_string是将字串存到参数表中指定的变量中(引号标注的是Action参数表中已有的变量),lr_eval_string则是取出参数或者字串变量的值,哈哈,这样我就可以把不同的Action写成函数,然后自由地传递参数了。

   不过新问题又来了,怎样把网页上查得的结果比如用户名列表捕获到,又传回到参数表中呢?这样我们才可以构建更加自动化的用例啊。QTP是可以在页面捕获输出的,不过LR我还没有找到方法。哪位大虾指点一下啊!!!
     当然如果是存在后台数据库中的表,就可以用直接链到数据源的方法。要是没有办法连到后台呢?


[ Last edited by johnbear on 2004-11-9 at 17:19 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

2#
发表于 2004-11-9 11:56:50 | 只看该作者
关注,楼主所说的要好好消化一下 :)
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2004-11-9 17:21:34 | 只看该作者

现在就是不明白怎么去将网页输出捕获到变量里。

我试过QTP是有这么一个功能的。不过LR我还真没有找到。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2004-11-9 23:28:54 | 只看该作者
楼主:
lr自己提供的api有的可以参数化函数入口形参,有的api是不可以参数化函数入口形参的。在每个api的介绍中都有。比如lr_output_message就不能参数化其入口。web_submit_form肯定是可以参数化的。
但是自己手写的api,lr都没有提供直接参数化机制的。必须用lr_eval_string先读出来,再传递给入口的。
从网页里读出数据来倒不是难事,困难的是你如何把它实时地写进参数表中去吧。对于一个文件,lr既要读又要写,这里涉及一个锁的机制。实现比较困难。我认为。
如果自己定义一个数组,全局变量,专门存放读出来的变量。是不是能好些?建议而已。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2004-11-10 09:05:41 | 只看该作者

版主还是顺便教教我从网页中读数据吧。

"从网页里读出数据来倒不是难事"--呵呵,太好了,就是找这个呢。

自已用全局变量表存放数据确实要方便得多,同意版主意见!
版主还是顺便教教我从网页中读数据吧。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2004-11-10 09:35:15 | 只看该作者
不会吧
从网页里读出数据作为一个参数,这个功能在lr中的帮助文档中都有,你可以参看一下上面的例子
使用web_reg_save_param 函数。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2004-11-10 11:18:37 | 只看该作者

多谢老大!

找到这个函数啦,呵呵。
现在知道怎么用了。多谢老大!:p
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2004-11-10 15:26:09 | 只看该作者
研究的都够深的。。。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-1-10 08:32:01 | 只看该作者
sdlkfj1 sdlkfj1 sdlkfj1
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-1-12 17:13:56 | 只看该作者
楼主我想问个问题:
lr_save_string(lr_eave_string(id),"id");
会不会导致类型不匹配.
我按你的这个方法写了一下.出现了下面的错误.
Action.c (13): type error in argument 1 to `lr_save_string'; found `int' expected `pointer to const char'
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-24 03:49 , Processed in 0.071463 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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