51Testing软件测试论坛

标题: 录制下来的脚本运行时间和业务实际时间不一致?web_reg_save_param的用法求助 [打印本页]

作者: newtester2008    时间: 2008-3-7 14:57
标题: 录制下来的脚本运行时间和业务实际时间不一致?web_reg_save_param的用法求助
查询某一列表,脚本录制下来就一个请求,但有思考时间,大概8秒(不一定),若撇开思考时间,脚本执行这个请求非常快,1秒钟不到,而这个请求就是对数据库的一个查询操作,这条sql直接连数据库查询花费了12秒左右的时间。实际业务中显示这个列表也差不多是12秒左右。
如果运行脚本包含这个思考时间的话,一个vuser好像跟实际是接近的,但多用户并发时思考时间始终不会因并发用户数而增加的,但实际软件中多用户查询是要慢的,对于这种情况怎么处理?这个脚本录制地有问题吗?(浏览器的缓存机制已经取消)
这个请求的脚本是这样的

        web_custom_request("Manager!getListItemLevelGrid.action_2",
                "URL=http://192.168.0.114:9080/XMGL/pages/Item/Manager!getListItemLevelGrid.action",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/html",
                "Referer=http://192.168.0.114:9080/XMGL/pages/ItemList.htm",
                "Snapshot=t12.inf",
                "Mode=HTML",
                "EncType=text/xml; charset=UTF-8",
                "Body=<Request><Param><Name><![CDATA[hsql]]></Name><Value><![CDATA[select distinct o \tfrom ViewItemListInfo o,OperEnterprise op,\t\t Operator jo\twhere op.id.enterpriseGuId=o.enterpriseGuid and o.delflag is null and \t\t((o.infoguid=jo.divisionGuId \t\t\tand o.infotype=2 and jo.enIsbnCode='310001')\t\t\tor (o.infoguid=5937 and o.infotype=1)) \t\tand o.opertime = (select max(wl.subTime) from WorkLog wl where wl.itemGuid=o.id.itemGuid and wl.exchangeCode in('SEND','RESEND','ZJ','REVERT','PRESENT')) "
                "\t\tand o.year=2008\t\tand jo.guId=5937\t\tand NVL(o.status,0)<>-1 \t\tand NVL(o.status,0)<>10      and o.exCode<>'ITEMSAVE' and o.exCode<>'SAVE'\t\tand op.id.operatorGuId=5937 and op.id.year=2008 order by o.opertime desc]]></Value></Param><Param><Name><![CDATA[condition]]></Name><Value><![CDATA[]]></Value></Param><Param><Name><![CDATA[enGuid]]></Name><Value><![CDATA[_rootId]]></Value></Param></Request>\r\n",
                LAST);

[ 本帖最后由 newtester2008 于 2008-3-11 17:21 编辑 ]
作者: newtester2008    时间: 2008-3-7 18:03
实际业务场景运行时,数据库服务器CPU使用率瞬间达到80-100%,而脚本运行时,数据库服务器CPU使用率基本没什么变化,脚本运行时,没有真的去执行这条sql吗?
应用服务器是Apache+Websphere+Unix,数据库服务器win2ksrv+Oracle9.2
数据库服务器是普通PC,配置不是很好,但如上所述的这个问题是怎么回事呢?请求帮助
作者: Zee    时间: 2008-3-9 10:47
数据都正确返回了吗?
作者: newtester2008    时间: 2008-3-9 13:18
原帖由 Zee 于 2008-3-9 10:47 发表
数据都正确返回了吗?

oho,回放快照显示,每个服务器响应的body部分都是为空的。

经对比,客户端请求的header部分,录制和回放存在一些区别
录制:
request-type: xmlhttp
Cookie: _grid2DataCell0=grid1_colWidth%3D100%2C187%2C100%2C130%2C169%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100; JSESSIONID=0000PK9LM1YzCzPTRn_Zn167P8X:-1
回放:
Cookie: _grid2DataCell0=grid1_colWidth%3D100%2C187%2C100%2C130%2C169%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100

录制的cookie存在JSESSIONID,而回放不存在。这是否是记录登录用户的临时产生的一个sessionid,每次都在变?(录制的每一个custom request的这段cookie内容都是一样的)
当脚本回放时,这个sessionid已经失效,导致无法识别登录用户从而无法返回真实数据?

可以这么理解吗?如何来解决这个问题?

录制的脚本中不存在sessionid,在客户端请求的header的cookie中
在初始的action中,第一句就是web_add_cookie("_grid2DataCell0=grid1_colWidth%3D100%2C187%2C100%2C130%2C169%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100%2C100; DOMAIN=192.168.0.114

怎么捕捉这个JSESSIONID并使该脚本有效执行?

[ 本帖最后由 newtester2008 于 2008-3-9 19:36 编辑 ]
作者: Zee    时间: 2008-3-9 22:12
关联一下。
作者: newtester2008    时间: 2008-3-10 09:41
原帖由 Zee 于 2008-3-9 22:12 发表
关联一下。

扫描关联,没有找到要关联的内容?
作者: newtester2008    时间: 2008-3-10 09:49
录制的脚本中不存在sessionid,在树->客户端请求->header的cookie中存在JSESSIONID
作者: higkoo    时间: 2008-3-10 10:32
标题: 关联
不能自动关联 就需要手动设置关联喔……
作者: newtester2008    时间: 2008-3-10 20:04
关联也需要通过web_reg_save_param,把sessionid赋予一参数,然后在脚本中把相关的sessionid用该参数替换。可我的脚本中是不存在sessionid的啊
是我不理解web_reg_save_param的含义用法吗?
作者: newtester2008    时间: 2008-3-10 20:26
再说说我的脚本
web_custom_request("login.in",
  "URL=http://192.168.0.114:9080/XMGL/login.in",
  "Method=POST",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=http://192.168.0.114:9080/XMGL/framework/login.htm",
  "Snapshot=t4.inf",
  "Mode=HTML",
  "EncType=text/xml; charset=UTF-8",
  "Body=<Request><aram><Name><![CDATA[operatorCode]]></Name><Value><![CDATA[shiqiqi]]></Value></Param><aram><Name><![CDATA[password]]></Name><Value><![CDATA[123456]]></Value></Param></Request>\r\n",
  LAST);

web_url("index.htm",
  "URL=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t5.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=images/bg_left2.gif", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/Tree.htc", "Referer=", ENDITEM,
  "Url=images/bg_copyright.gif", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=images/bg_bt.gif", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/constant.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/public.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/Tree.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/Display.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/Row.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/TreeNode.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/event.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=htc/tree/DataSource.js", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  "Url=images/loadingbar.swf", "Referer=http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F", ENDITEM,
  LAST);

web_custom_request这个请求,服务器响应的body部分如下:
Body:
------------------------------------------
<key>B565EB169B36D639BB723E0BB0E9303F</key>



这个是根据登录用户随机产生的数值,每次都在变。该段脚本的客户端请求header的cookie中还没有JSESSIONID


web_url("index.htm", .......这段脚本中,header的cookie中就添加了JSESSIONID,之后的每个web_custom_request web_url的客户端请求header的cookie中都带有JSESSIONID


针对这种情况,应该如何处理?

[ 本帖最后由 newtester2008 于 2008-3-10 20:32 编辑 ]
作者: Zee    时间: 2008-3-11 00:09
关联的数据,不是在脚本中去找的。要到server response中去找。
如果不是本地生成的动态值,这个值是从服务器传过来的。就可以检查出来。
你去看看generator log.
作者: newtester2008    时间: 2008-3-11 09:51
回放日志中找B565EB169B36D639BB723E0BB0E9303F,第一次就是出现在http://192.168.0.114:9080/XMGL/framework/index.htm?B565EB169B36D639BB723E0BB0E9303F

在生成日志中显示
$$$$$$ Response Header For Transaction With Id 17 Ended $$$$$$

****** Response Body For Transaction With Id 17 ******
<key>B565EB169B36D639BB723E0BB0E9303F</key>
$$$$$$ Response Body For Transaction With Id 17 Ended $$$$$$

web_custom_request("login.in",   之前添加
web_reg_save_param("userid","LB=<key>","RB=</key>","Search=All",LAST);
lr_output_message ("%s", lr_eval_string("{userid}"));

回放提示“错误 -26377: 找不到请求的参数“userid”的匹配项”
作者: hhy0824    时间: 2008-3-11 13:24
是不是这个web_reg_save_param("userid","LB=<key>","RB=</key>","Search=All",LAST);函数位置放的不对呀?
作者: newtester2008    时间: 2008-3-11 15:11
原帖由 hhy0824 于 2008-3-11 13:24 发表
是不是这个web_reg_save_param("userid","LB=","RB=","Search=All",LAST);函数位置放的不对呀?


放web_custom_request或web_url之前都不行,况且B565EB169B36D639BB723E0BB0E9303F是web_custom_request这段脚本server返回的结果,放在这之前应该没错吧
作者: newtester2008    时间: 2008-3-11 19:55
大家再指点一下么,拜托了

[ 本帖最后由 newtester2008 于 2008-3-11 20:00 编辑 ]
作者: newtester2008    时间: 2008-3-12 14:00

作者: newtester2008    时间: 2008-3-13 11:18
这个问题解决了,web_reg_save_param用法并没有错,URL直接添加了用户代码和密码,返回成功
web_reg_save_param ("UserID","LB=<key>","RB=</key>","Search=body",LAST);

web_custom_request("login.in",
  "URL=http://192.168.0.114:9080/XMGL/login.in?operatorCode=shiqiqi&password=123456",
  "Method=POST",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=http://192.168.0.114:9080/XMGL/framework/login.htm",
  "Snapshot=t4.inf",
  "Mode=HTML",
  "EncType=text/xml; charset=UTF-8",
  //"Body=<Request><aram><Name><![CDATA[operatorCode]]></Name><Value><![CDATA[shiqiqi]]></Value></Param><aram><Name><![CDATA[password]]></Name><Value><![CDATA[123456]]></Value></Param></Request>\r\n",
  LAST);

lr_output_message ("The UserID is: %s",lr_eval_string ("{UserID}"));




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