51Testing软件测试论坛

标题: 请教一段有关登陆的LR脚本问题 [打印本页]

作者: constantina    时间: 2008-4-1 11:35
标题: 请教一段有关登陆的LR脚本问题
登陆脚本如下IP和帐号内容代替为xxx)

#include "web_api.h"
Action()
{
        web_url("xxxx",
                "URL=http://xxx.xxx.xxx.xxx:xxxx/xxxx",
                "TargetFrame=",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=",
                "Snapshot=t1.inf",
                "Mode=HTML",
                LAST);

        web_submit_data("login;jsessionid=76B27DF06C79E1A31399A138ED94F1CE",
                "Action=https://xxx.xxx.xxx.xxx:xxxx/login;jsessionid={JSESSIONID2}",
                "Method=POST",
                "TargetFrame=",
                "RecContentType=text/html",
                "Referer=",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=username", "Value=user", ENDITEM,
                "Name=password", "Value=passwd", ENDITEM,
                "Name=rand", "Value=3768", ENDITEM,
                "Name=lt", "Value=_cAE71270E-E8C1-7363-7922-93DE3C75E3B4_k309245EF-3A2B-A7B9-564A-C4E3C870DBAD", ENDITEM,
                "Name=_eventId", "Value=submit", ENDITEM,
                "Name=submit", "Value=登录", ENDITEM,
                LAST);

        web_reg_find("Text=verifycode",
        LAST);

/*
//检查登录结果
                if("Text=verifycode")
                   {
              lr_output_message("登录成功啦!");
        }
        else
                {
              lr_error_message("登录失败啦!");
                }
*/
                return 0;
}

执行结果老是报:
"Error -27257: Pending web_reg_find request(s) detected and reset at the end of iteration number 1"
请高手指点一下迷津,先谢谢啊

另外我注释的那段if判断好象也有点问题,希望能帮我指明一下...
作者: gp_jl    时间: 2008-4-1 13:06
1.  把这段代码  web_reg_find("Text=verifycode",        LAST);放在web _submit_data之前;
2.  web_reg_find("Text=verifycode",        LAST);这个函数的目的是查找文本为“veryfycode”的文本数据,并不是把“veryfycode”赋值到“text”中。
如果需要通过打印输出数据,判断执行情况,可以增加并修改如下代码:

int i;
i = web_reg_find("Text=verifycode",
        LAST);
web_submit_data("login;jsessionid=76B27DF06C79E1A31399A138ED94F1CE,。。。。);

//检查登录结果
if(i ==0)
                   {
              lr_output_message("登录成功啦!");
        }
        else
                {
              lr_error_message("登录失败啦!");
                }

******************************************************
谢谢楼下,说的极是!

[ 本帖最后由 gp_jl 于 2008-4-2 08:43 编辑 ]
作者: hxf    时间: 2008-4-1 14:08
楼上的是不是有点小错误。
i=web_reg_find("web_find",
                "What=广州公交数据中心升级改造综合管理系统",
                LAST);
        if(i==0)
                {
                        lr_output_message("登录成功");
                }
        else
                {
                        lr_output_message("登录失败");
                }
返回值为零的时候才是成功吧
作者: aks5201314    时间: 2008-4-1 18:46
web_submit_data("login;jsessionid=76B27DF06C79E1A31399A138ED94F1CE",

                "Action=https://xxx.xxx.xxx.xxx:xxxx/login;jsessionid={JSESSIONID2}",
                "Method=POST",
                "TargetFrame=",
                "RecContentType=text/html",
                "Referer=",
    .........


web_find("check_text",
     "what=verifycode",
           LAST);

楼主可以试试这样,web_find函数也可以检查页面的返回值,回放脚本LR会自动进行比对以判断是否找到了你要找的值.用这个函数时,你要找的verifycode在返回的页面最好唯一.
哦,别忘了runtime-setting-->preferences-->checks下的Enable image and text check 前打上勾就可以了.
另外说一句web_reg_find函数的执行效率,适用范围都优于web_find,是web_find函数的替代 者.楼主可以根据实际的情况在脚本中选用.
作者: 随机测试    时间: 2008-4-1 19:08
看楼主录制的代码中有动态的sessionID。对于这样的web系统进行,性能测试的时候,需要进行参数化。动态获得sessionID的方法,可以在录制的脚本的时候,把log打卡。录制完之后在相关路径下打开录制log。log中所有所有和服务器交互的信息。把你录制脚本中的sessionid,就是特别长的那一串数,在log总搜索。找到相应地方,找到左边界和右边界,然后用函数返回这个值。这样就可以动态获得sessionid。登录就不会报错了。
作者: 云层    时间: 2008-4-2 09:36
整个脚本问题比较多的,首先登陆的问题和楼上说的一致,必须要用关联得到sessionid,才能确保登陆脚本的运行成功,其次在使用web_reg_find()函数的时候有比较严重的错误
1.web_reg_find()应该放在web_submit_data()以前
2.web_reg_find()函数写错了,

        web_reg_find("Search=Body",
                "SaveCount=checklink",
                "Text=hello world",
                LAST);
SaveCount这个说明查询结果放在哪个变量中,如果没有查询到hello world那么checklink=0否则查到几个checklink就是几

然后你就可以根据这个来判断了
    if(checklink==0)
                {
                        lr_output_message("登录成功");
                }
        else
                {
                        lr_output_message("登录失败");
                }
其实我们一般不用lr_output_message来配合,比较好的方法是通过事务来确认是否是所期望的结果,请参考手动事务的相关文章
作者: dujun    时间: 2008-4-2 11:08
都是高人 学习
作者: constantina    时间: 2008-4-15 00:39
谢谢各位啊,问题我已经自己摸索来解决了...很谢谢大家!!!
作者: 豆子    时间: 2008-5-20 09:12
请问一下LZ,你的解决方法是什么,我也遇到了相同的问题,好像是在出错后的interation number没初始化导致的,重启电脑就好了。
请指教~~~




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