zb1119 发表于 2013-8-5 15:15:18

手动关联的问题,请各位指点一下。

录制的脚本可以正常运行。脚本的整体思路是这样。根据手工输入的工号,从数据库中取得ID,再提交结果。我试过不更改手工输入的工号,直接从数据库中取得ID进行参数化,是可以正常运行出结果的。但这样的话,和实际场景有很大差距。
我希望场景更真实些,将手工输入的工号做参数化,将ID做手动关联。但是手动关联的时候,一直没有成功。请教一下大家,为什么会失败,如何解决呢?

web_reg_save_param("id", "LB=\"Name=userids\", \"Value=", "RB=,","Search=headers", LAST);

        web_submit_data("ResUserAction.do_2",
                "Action=http://73.16.17.197:8008/wskp/ResUserAction.do?method=add&flag=U&function_id=26&selects=010127",
                "Method=POST",
                "RecContentType=text/html",
                "Referer=http://73.16.17.197:8008/wskp/system/AddURO.jsp?flag=U&function_id=26&time=20138395056",
                "Snapshot=t80.inf",
                "Mode=HTTP",
                ITEMDATA,
                "Name=partuname", "Value=李英俊", ENDITEM,
                "Name=userids", "Value={id}", ENDITEM, //员工ID
                "Name=partupid", "Value=0101272810", ENDITEM,
                "Name=partrids", "Value=168", ENDITEM, //角色
                "Name=partupname", "Value=一科", ENDITEM,
                "Name=flag", "Value=", ENDITEM,
                "Name=id", "Value=0", ENDITEM,
                "Name=function_id", "Value=", ENDITEM,
                "Name=currentPage", "Value=1", ENDITEM,
                "Name=pageSize", "Value=20", ENDITEM,
                "Name=partrname", "Value=通用查询", ENDITEM,
                "Name=roleids", "Value=168", ENDITEM, //角色
                "Name=partadmin", "Value=否", ENDITEM,
                "Name=partrnames", "Value=否", ENDITEM,
                LAST);

//                lr_output_message("id: %s",lr_eval_string("({id}"));
//                lr_message("When_Txt: %s",lr_eval_string("({When_Txt}"));
                lr_log_message("id :%s" ,lr_eval_string("({id}"));


Action.c(1735): Registering web_url("tj-d.gif") was successful       
Action.c(1743): web_concurrent_end was successful, 2496 body bytes, 481 header bytes       
Action.c(1746): Registering web_reg_save_param was successful       
Action.c(1748): Error -26377: No match found for the requested parameter "id". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size       
Action.c(1748): web_submit_data("ResUserAction.do_2") highest severity level was "ERROR", 72 body bytes, 186 header bytes       

地壳 发表于 2013-8-5 18:01:01

看半天没懂是怎样一个过程?从数据库中取得ID,怎么想都像是一个验证码

地壳 发表于 2013-8-5 18:01:32

跟踪,答案!

398073412 发表于 2013-8-6 11:42:44

很明显,这个页面提交后才会返回员工id,而你却在‘提交时’参数化员工id;则根本是本末倒置的
因为这个页面提交前,你前面那个关联函数保存的{id}根本还没有获得返回值,
所以这时"Name=userids", "Value={id}", ENDITEM, //员工ID中的{id}是没有值的,自然失败了
如果我没猜错的话,这个提交页面不需要参数{id},直接"Name=userids", "Value=", ENDITEM, 就可以了吧;
你最好把你的原始录制脚本发出来看看

szyszy2000 发表于 2013-8-6 14:53:52

脚本看看,最好开下日志,看下交互过程,左右边界 是通过看日志查到的吗?

zb1119 发表于 2013-8-6 15:19:19

脚本贴上了,大家帮忙看一下。

szyszy2000 发表于 2013-8-6 15:25:28

22021300 是工号吧?
查下你的ID是不是在这个脚本提交之后:
web_submit_data("UserAction.do_2",
                "Action=http://192.168.17.197:8008/wskp/UserAction.do?method=select&flag=select",
                "Method=POST",
                "RecContentType=text/html",
                "Referer=http://192.168.17.197:8008/wskp/UserAction.do?method=select&flag=select&function_id=26&time=2013839511",
                "Snapshot=t75.inf",
                "Mode=HTTP",
                ITEMDATA,
                "Name=userid", "Value=22021300", ENDITEM,
                "Name=username_zh", "Value=", ENDITEM,
                "Name=function_id", "Value=26", ENDITEM,
                "Name=currentPage", "Value=1", ENDITEM,
                "Name=pageSize", "Value=20", ENDITEM,
                LAST);

zb1119 发表于 2013-8-6 15:46:52

回复 7# szyszy2000


22021300是工号,在脚本的第444行进行了查询。查询出了ID,ID在第1756行进行使用,我关联的就是这个1756行的ID。
也就是说,工号是在这个脚本提交之前。

zb1119 发表于 2013-8-6 16:09:45

回复 6# zb1119


    补充一下:
工号22021300对应的ID是4676
工号22021302对应的ID是4983
工号22021309对应的ID是4998


444行查询的22021300
1756行的结果是:"Name=userid", "Value=4676", ENDITEM, (数据库里根据22021300查询出的4676)
我把4676直接用参数化执行的时候,就直接能运行成功。(直接改成4983,4998等等就可以达到我要求,而不用考虑前面的工号)
我现在想更真实的把4676手工关联,就提示失败。

szyszy2000 发表于 2013-8-7 09:23:47

回复szyszy2000


22021300是工号,在脚本的第444行进行了查询。查询出了ID,ID在第1756行进行使用,我 ...
zb1119 发表于 2013-8-6 15:46 http://bbs.51testing.com/images/common/back.gif

关联是在获得值之前进行注册获取返回值,所以你在444行查出了ID,想在1756行用,那么就在444行之前进行关联

398073412 发表于 2013-8-7 09:45:30

首先,1756行不要参数,直接使用原id,运行看看你上面那个关联能不能取到值,若不能则表示左右边界不对
其次,即使能取到值,你也不能在1756行使用关联参数,因为本页面提交前web_reg_save_param只是注册成功,但还没有取得返回值,不能在本页面使用{id}

其实最大的可能应该是,这个ids不是在这个页面第一次返回的,如果这个工号是登录用户的工号的话,那么可能是在登录时返回的
如果不是登录帐号,那么可能是在某一步使用了这个工号的页面返回的(比如在436行那个页面返回的),你去第436行的页面找找它的返回信息
你应该在第一次返回这个id之前关联,而不是在要使用这个id的时候才关联

zb1119 发表于 2013-8-8 14:11:22

回复 10# szyszy2000


    如果1756直接使用ID,是能取到值的。
从脚本里搜过,只搜到这一个4676,所以我觉得是第一次出现的。

398073412 发表于 2013-8-8 15:03:18

回复 12# zb1119


    不是从脚本中搜,而是从生成日志generation log中搜第一次出现的位置,然后定位这个位置对应的页面是哪个;再到对应页面中做关联,如图

你说id在444行查询的,你就到444行的页面中去找,
如果你不能确定第一次出现的位置的话,你就在runtime setting打开扩展日志勾选全部,然后回放一次,在回放日志中搜索那个id。右键跳到对应行就是了

zb1119 发表于 2013-8-15 14:18:44

回复 13# 398073412


    感谢你的帮助。的确通过generation.log中能查询到4676,可是如何定位这个位置对应的页面呢?
页: [1]
查看完整版本: 手动关联的问题,请各位指点一下。