51Testing软件测试论坛

标题: 脚本录制与参数化设计 [打印本页]

作者: duola1119    时间: 2007-3-12 10:57
标题: 脚本录制与参数化设计
请大家帮忙看一下.也许你们也遇到过的!所以我将标题修改为资料了!请原谅.
使用LR录制了一份脚本.其中有一个动态数据taskid.它是指工作流ID.
一个工程中包括很多的工作流.每一个工作流都有不同的taskid.
录制脚本之后.我写了一个
web_reg_save_param("task_id",
  "LB/IC=<a href=\"javasrcipt:openTaskWindow('",
  "RB/IC=')",
  "Ord=1",
  "Search=ALL",
  LAST);
其中程序代码中的taskid是这样的:<td><a href="javascript:openTaskWindow('4')">UserTask</a></td>,这里taskid=4;
为了从服务端获取这个task_id.然后我在录制脚本中.将所有出现taskid的地方都用file类型的叫task_id参数替换,
但是总是搞不清这段小程序应该放在哪个位置.每次更换位置都会有错误:no math found task_id.
这个问题已经困扰了我很久了.非常闹心啊.哪位同仁解决过这类问题的给小弟提示一下.多谢了.
作者: duola1119    时间: 2007-3-12 10:58
国际惯例我先顶一下.
这个问题我问了好几次了.一直都没人回答.好伤心.
作者: duola1119    时间: 2007-3-12 11:20
大家不要看了就走.说句话嘛
作者: duola1119    时间: 2007-3-12 12:43
Action.c(110): Error -26377: No match found for the requested parameter "task_id". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size          [MsgId: MERR-26377]
Action.c(110): web_url("taskdetail.do") highest severity level was "ERROR", 2712 body bytes, 150 header bytes, 30 chunking overhead bytes          [MsgId: MMSG-26387]
Ending action Action.
作者: Zee    时间: 2007-3-12 13:36
web_reg_save_param is a registration type function. It registers a request to find and save a text string within the server response. The operation is performed only after executing the next action function, such as web_url.
作者: duola1119    时间: 2007-3-12 13:51
Zee.位置问题已经解决.
但现在总是提示获取的taskid不够准确.
其中程序中涉及到的地方一共有:
<script type="text/javascript">
function openTaskWindow(taskId){       
  theLeft=(screen.width - 600)/2;
  theTop=(screen.height - 500)/2;
  window.open("taskdetail.do?fromMonitoringList=true&taskid="+taskId,'','scrollbars,top='+theTop+',left='+theLeft+',width=600,height=500,resizable=yes');
}
function openErrorTaskWindow(taskId){       
  theLeft=(screen.width - 600)/2;
  theTop=(screen.height - 500)/2;
  window.open("errortaskDetail.do?fromMonitoringList=true&errorTaskId="+taskId,'','scrollbars,top='+theTop+',left='+theLeft+',width=600,height=500,resizable=yes');
}
这里有taskId,还有
<td><a href="javascript:openTaskWindow('4')">UserTask</a></td>
这个4也是taskid.
我写的web_reg_save_param();应该取哪个值呢?
几乎所有的我都试了.都不好使.
作者: duola1119    时间: 2007-3-12 15:07
我的问题是太简单.还是太难?怎么没人回答.?
作者: Zee    时间: 2007-3-12 16:46
应该取哪个值?

你想取哪个值。看你在前面写的:

web_reg_save_param("task_id",
  "LB/IC=<a href=\"javasrcipt:openTaskWindow('",
  "RB/IC=')",
  "Ord=1",
  "Search=ALL",
  LAST);

你取的是第一个值。

ORD: Indicates the ordinal position or instance of the match. The default instance is 1. If you specify "All," it saves the parameter values in an array. This attribute is optional.
Note: The use of Instance instead of ORD is supported for backward compatibility, but deprecated.
作者: ppent    时间: 2007-3-12 18:21
你的软件实现方式和我测试的很类似,只是你的是bs,我的是cs。
思路是每次将服务器返回的taskid存到变量中作为下一步处理的对象。
作者: duola1119    时间: 2007-3-13 08:57
我也是这个思路.但是在每次执行之后.就是获取不到这个task_id.
web_reg_save_param();
中LB,RB都=空的时候.web_reg_save_param下的脚本就能够正常执行.
但是当LB=<a href=\"javasrcipt:openTaskWindow('
  RB=')的时候这个函数下面的脚本就不执行了.直接错误.
Error -26377: No match found for the requested parameter "task_id". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size          [MsgId: MERR-26377]
Action.c(116): web_url("taskdetail.do") highest severity level was "ERROR", 5666 body bytes, 355 header bytes, 18 chunking overhead bytes          [MsgId: MMSG-26387]
Ending action Action.
作者: Zee    时间: 2007-3-13 09:25
你把取出的值打印出来看看。
还有,你是在哪里调用这个变量的?
别写错地方了。
作者: duola1119    时间: 2007-3-13 10:25
lr_output_message("aaaaa=%s",lr_eval_string("{taskId}"));
打印结果是:
aaaaa=taskId;
当"LB= ","RB= ",的时候打印结果是aaaaa=28.这个28是我第一次录制的时候用到的taskid值.
   web_reg_save_param("task_id",
     "LB/IC=<a href=\"javasrcipt:openTaskWindow('",
     "RB/IC=')",
     "Ord=1",
     "Search=ALL",
      LAST );

        lr_output_message("aaaaa=%s",lr_eval_string("{taskId}"));

        web_url("checktaskstate.jsp",
                "URL=http://192.168.0.135:8888/usertasks/checktaskstate.jsp",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://192.168.0.135:8888/usertasks/activityList.do?flowId=",
                "Snapshot=t6.inf",
                "Mode=HTML",
                LAST);

        web_url("taskdetail.do",
                "URL=http://192.168.0.135:8888/usertasks/taskdetail.do?fromMonitoringList=true&taskId={taskId}",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=",
                "Snapshot=t7.inf",
                "Mode=HTML",
                LAST);
作者: duola1119    时间: 2007-3-13 14:20
老大们进来看看.帮解决一下啊.
作者: Zee    时间: 2007-3-13 14:55
感觉你的   web_reg_save_param("task_id",
     "LB/IC=<a href=\"javasrcipt:openTaskWindow('",
     "RB/IC=')",
     "Ord=1",
     "Search=ALL",
      LAST );
左右边界写的不对。自己检查一下。
作者: duola1119    时间: 2007-3-13 15:07
这是我要提取数据的界面代码.
高手指点一我应该怎么写这个web_reg_save_param();
作者: duola1119    时间: 2007-3-13 15:11
itemArray[itemArray.length]=new Item("6_1",
                                    "",
                                    "",                                    
                                    "UserTask",
                                    " ",
                                    " ",
                                    "2007-03-13 14:41",
                                    "Ready",
                                    " ",                                   
                                    "",
                                    "",
                                    "6",
                                    "images/ready.gif",
                                    true);
   
  initAllItems(itemArray,1);
  
</script>


<script>
function change(defId) {
        ajaxChange(defId);
}
</script>

<script type="text/javascript">
function openTaskWindow(taskId){       
  theLeft=(screen.width - 600)/2;
  theTop=(screen.height - 500)/2;
  window.open("taskdetail.do?fromMonitoringList=true&taskid="+taskId,'','scrollbars,top='+theTop+',left='+theLeft+',width=600,height=500,resizable=yes');
}
function openErrorTaskWindow(taskId){       
  theLeft=(screen.width - 600)/2;
  theTop=(screen.height - 500)/2;
  window.open("errortaskDetail.do?fromMonitoringList=true&errorTaskId="+taskId,'','scrollbars,top='+theTop+',left='+theLeft+',width=600,height=500,resizable=yes');
}
function changeState(){
  var selectedItem=document.getElementById("selectedItem").value;
  if(selectedItem.indexOf("f_")==0){
          parent.monitor.flowId=selectedItem.substring(2,selectedItem.length);
  }else{
          parent.monitor.flowId="";
  }

}
</script>
<script language="javascript">
function openActInfo() {
        var selectedItem = document.getElementById('selectedItem').value;
        window.location='/usertasks/activityList.do?isAll=true&openAll=true&selectedItem=' + selectedItem;
}  
  <tr>
      <td rowspan="2" class="header_logo"><img src="images/logo.gif"></td>
      <td class="header_top"><img src="images/header_top.gif"></td>
      <td class="header_bg" align="right">&nbsp;</td>
      <td class="header_bg" colspan="2">&nbsp;</td>
      <td class="header_right"><img src="images/logo_eb.gif"></td>
    </tr>
  <tr>
    <td class="header_menubar_nav">
   
         用户任务列表
   
  
     </td>
      <td class="header_menubar_bg" align="center">&nbsp;</td>
      <td class="header_menubar_right" align="center" nowrap="nowrap"></td>   
    <td class="header_menubar_bg" height="34"><script type="text/javascript">

      oCMenu.makeMenu('Home','','首页','activitywatching.jsp','_top','','','','',cmBGColorOff,cmBGColorOn,cmTxtColor,cmHoverColor,'')

      oCMenu.makeMenu('Task','','任务'+cmTopMenuImage+'','','_top','','','','',cmBGColorOff,cmBGColorOn,cmTxtColor,cmHoverColor,'')
oCMenu.makeMenu('Taskquery','Task','任务查询','/usertasks/taskquery.do','_top','','','','',cmBGColorOff,cmBGColorOn,cmTxtColor,cmHoverColor,'')
oCMenu.makeMenu('Taskhist','Task','任务操作明细','/usertasks/usertaskhist.do','_top','','','','',cmBGColorOff,cmBGColorOn,cmTxtColor,cmHoverColor,'')
oCMenu.makeMenu('Taskhiststudy','Task','任务操作历史分析','/usertasks/taskhiststudy.do','_top','','','','',cmBGColorOff,cmBGColorOn,cmTxtColor,cmHoverColor,'')      
oCMenu.makeStyle(); oCMenu.construct()
</script>
</td>

        <td class="header_menubar_right" align="center" nowrap="nowrap"><SPAN align="right" id="alert" class="bell">&nbsp;</SPAN></td>         
   
  </tr>
</table>
<iframe id="FNotice" name="FNotice"
  style="width:0px; height:0px; border: 0px" src="./checkTimeNotice.jsp"></iframe>
<iframe id="RSIFrame" name="RSIFrame"
  style="width:0px; height:0px; border: 0px" src="./checktaskstate.jsp"></iframe>
<script language="JavaScript">
  var flag;
    if ( document.getElementById )
    {
     flag = document.getElementById( "alert" );
    }
  else if ( document.all )
    {
    flag = document.all["alert"];
    }
    setInterval( "updateClock()", 30*1000 );

  
  
  function updateClock()
  {
              try
            {
                frames["RSIFrame"].location.reload();
            }
            catch( err)
            {}

  }
</script>
</body>
<div class="main" id="main_div">
<form action="activityList.do" method="GET" id="selectForm" >
<table cellpadding="0" cellspacing="0" border="0" class="allFlow">
        <tr>
                <td>
                        <select name="selectedItem" id="selectedItem">
                               
                                        <option value="" selected>所有流程</option>
                               
                               
                               
                                        <option value="p_test" >test</option>
                                        
                                            <option value="f_6" >&nbsp;&nbsp;111</option>
                                           
                        </select>
                        <input type="submit" name="submit" class="btnNormal" value="确定" onClick="return changeState()" class="btn_01"/>
                </td>
               
        </tr>
</table></form>
<div class="dataGridContainer" id="container">

<table class="headtable" id="listTable">
<thead>
<tr>
<th>&nbsp;</th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=1&amp;flowId=">实例名</a></th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=2&amp;flowId=">名称</a></th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=3&amp;flowId=">描述</a></th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=4&amp;flowId=">预计开始时间</a></th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=5&amp;flowId=">开始执行时间</a></th>
<th class="sortable sorted order1">
<a href="/usertasks/activityList.do?d-49653-o=1&amp;d-49653-p=1&amp;d-49653-s=6&amp;flowId=">状态</a></th>
<th class="sortable">
<a href="/usertasks/activityList.do?d-49653-o=2&amp;d-49653-p=1&amp;d-49653-s=7&amp;flowId=">经办人</a></th></tr></thead>
<tbody>
<tr class="odd" id="6_1">
<td style="width:18px;align:center;"><a href='javascript:change("6_1")'><img border='0' src='images/ready.gif' align='absmiddle' width='16px' height='16px' id='stateIcon'/></a></td>
<td>111</td>
<td><a href="javascript:openTaskWindow('6')">UserTask</a></td>
<td class="desc"> </td>
<td>2007-03-13 14:41</td>
<td> </td>
<td>Ready</td>
<td> </td></tr></tbody></table>
</div>

</div>

<script language="javascript">
if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) {
        var rheight = 71;
        var rwidth = 18;
        } else {
        var rheight = 72;
        var rwidth = 22;
}
var bodyHeight = document.getElementById("rbody").clientHeight;
var bodyWidth = document.getElementById("rbody").clientWidth;
var mainHeight = bodyHeight-rheight;
if (mainHeight > 0 ){
   document.getElementById("main_div").style.height = mainHeight;
}
var containerHeight = mainHeight-32;
if (containerHeight > 0 ){
   document.getElementById("container").style.height = containerHeight;
}
var mainWidth = bodyWidth-rwidth;
var containerWidth =  bodyWidth-33;
if (mainWidth > 0 ){
        document.getElementById("main_div").style.width = mainWidth;
        document.getElementById("container").style.width = containerWidth;
//        document.getElementById("operateBar").style.width = containerWidth;
}
</script>

</body>
</html>
作者: duola1119    时间: 2007-3-14 08:29
使用数据库数据参数化变量有个缺点.就是不能实时获得数据库中已经更新的信息.
作者: wangyong3552128    时间: 2007-3-14 08:41
标题: duola1119
我们在手动设置左边界和右边界的时候,打开显示所有的log选项,运行后在replay log输出窗口中查找动态数据的左边界和右边界(越多越好,尽量不要用特殊字符)。
有可能是你把边界搞错啦。
作者: duola1119    时间: 2007-3-14 10:55
web_reg_save_param("task_id",
                "LB/IC=window.open(\"taskdetail.do?fromMonitoringList=true&taskid=\"",
                "RB/IC=,'','scrollbars",
                "Search=ALL",
                LAST);
楼上的朋友.你看下我这样取对不对?
作者: wangyong3552128    时间: 2007-3-14 11:49
web_reg_save_param("task_id",
                "LB=taskdetail.do?fromMonitoringList=true&",
                "RB=,''/",
                "Search=ALL",
                LAST);

把你的action.c发给我,qq:252034431,主动给我联系
作者: duola1119    时间: 2007-3-14 12:34
quanyao_jiang@idealinfo.com
公司不让用QQ...这是我的信箱.
作者: duola1119    时间: 2007-3-14 14:32
难道就没人能解决问题吗!sdlkfj8
作者: zhangtao    时间: 2007-3-14 17:53
标题: 边界的查找
边界的查找可以在录制日志中看到,如果看原编码可能找的不正确。还有在运行后中的页面请求中的boby能够看到!
有ctrl+f找你想替代的参数,找边界!
作者: ppent    时间: 2007-3-15 09:50
晕死,老大,你的左边界打错了!!!
javasrcipt:openTaskWindow,自己看看哪里错了
作者: duola1119    时间: 2007-3-15 10:36
楼上的朋友.就别难为我了.我找了3天都没找出哪错...你就直接指出来吧.
十分感谢了啊.
作者: duola1119    时间: 2007-3-15 10:37
javascript.修改之后也是不成功.
作者: duola1119    时间: 2007-3-15 10:52
三天内.我把这个程序中所有涉及到taskid的地方都取过.但是都不成功.
下面是我写的脚本.
//取上面的TASKID
web_reg_save_param("id",
     "LB/IC=javascript:openTaskWindow(",
     "RB/IC=)",
     "Search=ALL",
     LAST);
web_reg_save_param("id",
    "LB/IC=javascript:openTaskWindow('",
    "RB/IC=')",
    "Search=ALL",
    LAST);
web_reg_save_param("id",
    "LB/IC=taskdetail.do?fromMonitoringList=true&taskid=\"",
    "RB/IC=,'',",
    "Search=ALL",
    LAST);

上面两个不是一样的.一个有单引号.一个没有单引号.因为我现在已经不确定单引号应该不应该算在里面了.所以两个都试过.
//获取下面的那个TASIID.
web_reg_save_param("id",
    "LB/IC=javascript:openTaskWindow('",
    "RB/IC=')",
    "Search=ALL",
    LAST);

web_reg_save_param("id",
    "LB/IC=<a href=\"javascript:openTaskWindow('",
    "RB/IC=')"
    "Search=ALL",
    LAST);
作者: duola1119    时间: 2007-3-16 13:02
问一下.录制这种脚本用html-based script.还是用url_based script.
作者: ppent    时间: 2007-3-16 13:21
上面的问题搞定没有啊。
这两天也为类似的问题烦着,不过终于找到问题所在了。但还没有好的解决方法。sdlkfj9
作者: duola1119    时间: 2007-3-16 13:59
没有呢.我换了好多种方法来做.录制之后,一执行就错.没办法了.
作者: zhangtao    时间: 2007-3-16 17:41
呵呵~~~~~~~~~`html-based script
作者: duola1119    时间: 2007-3-19 09:51
ppent.你知道是怎么回事了?说说啊.
作者: duola1119    时间: 2007-3-19 17:16
班主帮看一下.有没有别的办法啊.
作者: jackly    时间: 2007-3-19 17:17
录制脚本过程中,使用的设置是否不对?

The web_reg_save_paramfunction is a Service function used for correlating HTML statements in Web Vuser scripts. Click here for an overview on Correlation

这个是LR帮助文件中的描述

个人也遇到过这样的问题,我认为应当注意以下三个方面

1  录制脚本时候的设置,是否 是HTML statements in Web Vuser scripts
2  录制脚本过程中web_reg_save_param的位置,应当放在要取数的页面前
3  参数的上下标识符号,注意特殊符号LR是否不可识别
作者: duola1119    时间: 2007-3-20 09:30
web_reg_save_param函数是一个用来在HTML语句中关联的服务型函数.
难道说对java script就不好使了吗?

html statements in web vuser scripts 这个设置又是在哪个地方?是指htme based.和url based么?

LR中的特殊符号一共有哪些呢?
作者: jackly    时间: 2007-3-20 10:07
建议你查下LR的帮助文件,在LR的在线帮助中,有WEB协议的脚本函数使用说明
作者: ppent    时间: 2007-3-20 10:30
标题: 回复 #35 duola1119 的帖子
我的问题和你的不一样。
另外,你可以在vugen中把log设置为打印服务器返回结果,然后在这个返回结果中看看能否根据你的web_reg_save_param函数的左右边界等条件得到想要的数据。
作者: duola1119    时间: 2007-3-20 10:53
web_reg_save_param帮助我看了不下10次了.我也认真的翻译过.要是按照帮助上说的我写的格式绝对没有错.
服务器返回结果我也打印了.输出结果是这样的.
ParamName =id
Left Boundary = LB=javascript:openTaskWindow('
Right Boundary = RB=')
Instance =
从这里看这个ID就是应该取两个单引号中间的值,但是instance却显示空.我很纳闷.
作者: duola1119    时间: 2007-3-20 10:55
我在论坛里又发了一个贴子.把我用的代码和录制的脚本传了上去.
希望大家看一看帮我解决一下.
作者: tearflying2002    时间: 2007-4-4 16:17
thanks




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