【转】LR 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?
上一篇 / 下一篇 2012-05-08 15:08:02 / 个人分类:loadrunner
同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求。
Action4.c(12): Warning -27796: Failed to connect toserver"10.11.204.35:80": [10060] Connection timed out [MsgId: MWAR-27796]Action4.c(12): Warning -26000: Empty or no response for URL=http://10.11.204.35/iwebfiles/yqlj/26/107/10/4/361.gif [MsgId: MWAR-26000] |
我查了一下,确实脚本中看不出问题,所有不相干的请求都删掉了,页面的请求中EXTRARES属性中的资源列表也都删掉了,只保留了主页面的请求。但只要一执行,就会去访问那个无法连接的资源。
分析与实验
查看了该页面的源文件,确实可以看到那个有问题的图片链接,是写在一个表格里的。于是很自然的猜测,是不是表格中的资源,录制不到脚本中、但是又访问了呢?
这种问题,其实确信只要把录制方式转换为URL-Based Mode就肯定能解决,因为可以显式的录下所有请求。但还是想把HTML-Based Mode下的问题解决,于是做了一些测试。
模拟那个问题页面,创建测试用页面。特意写了两个图片资源做对比,一个普通的图片,一个是放置在表格中的图片超链接,测试访问这个页面录制的脚本。
<html> <head> <meta. http-equiv="content-type" content="text/html;charset=gb2312"> <title>测试页面</title> </head> <body> <p> 普通的图片 <img src=http://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg width="126" height="45" border="0"/> </p> <p> <table border=2> <tr> <td> 表格中的图片跳转链接 </td> </tr> <tr> <td> <a href=http://172.16.1.3/bbs/viewthread.php?tid=44597&extra=page%3D1###zoom target="_blank"><img src=http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg width="126" height="45" border="0"/></a> </td> </tr> </table> </p> </body> </html> |
创建如上的HTML,放到TOMCAT的ROOT目录中,则可以通过tomcat访问该页面。
测试:
1、默认的HTML-Based Mode方式进行录制,只录到一个请求。
web_url("test_mode.html", "URL=http://172.16.6.17:8080/test_mode.html", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t12.inf", "Mode=HTML", LAST); |
脚本中看不到对资源的请求,但实际运行时,还是会去获取两个图片资源。通过Replay Log可以看到请求的证据:
Action_HTML.c(7):Found resourcehttp://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg in HTML http://172.16.6.17:8080/test_mode.html [MsgId: MMSG-26659] Action_HTML.c(7): Found resource http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg in HTML http://172.16.6.17:8080/test_mode.html [MsgId: MMSG-26659] |
2、URL-Based Mode录制方式,可以录制到所有的请求,包括一个页面请求,两个图片请求。
web_url("test_mode.html", web_concurrent_start(NULL); web_url("20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg", web_url("20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg", web_concurrent_end(NULL); |
对比两种录制方式可以发现,对主页面的请求,两个脚本的唯一差别就在Mode属性为"HTML"还是"HTTP"(代码中标记黄色处)。通过修改测试1(HTML-Based Mode),可以很容易的获得以下信息:
如果MODE="HTML",那么访问页面的请求,会自动去请求页面上的资源。
如果MODE="HTTP",那么会只请求这个页面的HTML文件。
但熟悉LR的人又肯定记得,在默认的HTML-Based Mode录制模式下,web_url脚本中应该会记录所请求的资源文件啊?在EXTRARES属性后经常会看到"Url=/image/test.jpg"这样的语句,那为什么出现问题的那个页面,和我们的测试页面录下来的脚本确实没记录资源文件呢?
要查明这点很容易,只要随便找一个网站录制一下,去看看脚本中记录的资源文件有什么特点就知道了。
用我们公司的搜索平台做一下实验,录制主页面如下。果然得到了我们期望的EXTRARES属性,下面列出了很多资源文件。
web_url("search.thunisoft.com", "URL=http://search.thunisoft.com/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t16.inf", "Mode=HTML", EXTRARES, "Url=/skins/default/images/bg_top.gif", ENDITEM, "Url=/skins/default/images/nav_bg.gif", ENDITEM, "Url=/skins/default/images/nav_right.jpg", ENDITEM, "Url=/skins/default/images/search_m.gif", ENDITEM, "Url=/skins/default/images/button02.gif", ENDITEM, "Url=/skins/default/images/nav_r.gif", ENDITEM, "Url=/skins/default/images/button01.gif", ENDITEM, "Url=/skins/default/images/nav_l.gif", ENDITEM, "Url=/skins/default/images/search_l.gif", ENDITEM, "Url=/skins/default/images/search_r.gif", ENDITEM, LAST); |
分析一下页面的源文件,搜索脚本中出现的各个图片名,居然发现一个都找不到!而源文件中出现的图片文件,在脚本中又都没记录。
那么继续寻找脚本中图片的来源吧。其实到这应该很自然的想到了CSS文件了吧,于是随着源文件中的<link>找到连接文件,果然EXTRARES中的所有资源文件都找到了。
结论
到这里结论其实也就出来了。(结论只针对HTML-Based Mode录制方式)
HTML页面中的资源,如页面里写的<img>(跟是不是在表格中无关...),是不会显示在脚本中的。
而外部链接中的资源,如<link type="text/css>连接的CSS文件中使用的图片,是会通过EXTRARES属性显示在脚本中的。
运行上面这个脚本,Replay Log中会显示:
Action3.c(8):Downloading resourcehttp://search.thunisoft.com/skins/default/images/bg_top.gif (specified by argument number 9) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_bg.gif (specified by argument number 11) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_right.jpg (specified by argument number 13) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_m.gif (specified by argument number 15) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/button02.gif (specified by argument number 17) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_r.gif (specified by argument number 19) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/button01.gif (specified by argument number 21) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_l.gif (specified by argument number 23) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_l.gif (specified by argument number 25) [MsgId: MMSG-26577] Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_r.gif (specified by argument number 27) [MsgId: MMSG-26577] |
细心的人可以发现,这个日志和第一步实验中的不一样呢。再次对比上面写出的两种Replay Log,可以发现一个是"Found resource ... in HTML ...",一个是"Downloading resource ..."(标记蓝色两处)
这样也可以解释了。
HTML文件内部的资源,不需要显示在脚本中就可以下载,因为会在访问这个页面时“发现”。
而外部链接的资源,必须在脚本中显式写出,才会去“下载”。
所以EXTRARES属性下面的资源,只要注释掉相应的脚本,就可以避免该请求。
而HTML页面文件中的资源,则只能通过修改MODE="HTTP"属性,或者改为URL-Based Mode录制方式,才能避免请求。
说到这,基本都清楚了,最后再翻一下官方文档(Function Reference)吧。
web_url EXTRARES: List of Resource Attributes: |
再次验证了我们的结论,EXTRARES中只显示非HTML文件中的资源。
原文转自:http://www.51testing.com/html/96/n-812696.html
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 51303
- 日志数: 47
- 文件数: 1
- 建立时间: 2011-07-13
- 更新时间: 2017-10-16