【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?
问题描述
同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求。
Action4.c(12): Warning -27796: Failed to connect to server "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 resource "http://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",
"URL=http://172.16.6.17:8080/test_mode.html",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t13.inf",
"Mode=HTTP",
LAST);
web_concurrent_start(NULL);
web_url("20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg",
"URL=http://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg",
"Resource=1",
"RecContentType=image/jpeg",
"Referer=http://172.16.6.17:8080/test_mode.html",
"Snapshot=t14.inf",
LAST);
web_url("20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg",
"URL=http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg",
"Resource=1",
"RecContentType=image/jpeg",
"Referer=http://172.16.6.17:8080/test_mode.html",
"Snapshot=t15.inf",
LAST);
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 resource "http://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:
A demarcation parameter indicating that the next parameter will be a list of resource attributes. List of Resource Attributes:
A list of resources generated by non–HTML mechanisms in the Web page. These include the resources requested by Javascript, ActiveX, Java applets and Flash. VuGen's Recording Options allow these elements either to be recorded within the current script step (the default mode) or recorded as separate steps (see "Recording in HTML–Based Mode" in the VuGen Online Book).

再次验证了我们的结论,EXTRARES中只显示非HTML文件中的资源。
作者:薛定谔的破猫
【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?的更多相关文章
- 【Unity】6.3 通过 C# 脚本创建和访问游戏对象
分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 在游戏开发过程中,脚本不但需要访问脚本所在的游戏对象的组件,还经常需要访问和控制真他游戏对象.另外,根据项目需求,还可能 ...
- GBDT+LR算法解析及Python实现
1. GBDT + LR 是什么 本质上GBDT+LR是一种具有stacking思想的二分类器模型,所以可以用来解决二分类问题.这个方法出自于Facebook 2014年的论文 Practical L ...
- 【转载】全面解析Unity3D自动生成的脚本工程文件
我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如: Assembly-CSharp-vs.csproj Assembly-CSharp-firstpass-vs.csp ...
- LR日志解析
在录制和回放的时候,VU会分别把发生的事件记录成日志文件,这些日志有利于我们跟踪VU和服务器的交互过程. 1.回放日志(Replay log) 脚本回放运行时的输出都记在这个log里. "输 ...
- [转载]ECMall模板解析语法与机制
ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...
- (转载)深入解析String#intern
本文转载自:深入解析String#intern 引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念. ...
- 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...
随机推荐
- AGC007 - C Pushing Ball
Description 题目链接 懒得写详细题意了, 放个链接 \(n\le 2*10^5\) 个球, \(n+1\) 个坑, 排成数轴, 球坑交替. 相邻球-坑距离为等差数列 \(d\). 给定首项 ...
- HDU 4667 Building Fence(求凸包的周长)
A - Building Fence Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64u ...
- Fiddler抓包3-查看get与post请求【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/p/6719717.html 前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可 ...
- hdu 5067(暴力搜索)
Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- asp.net 网站模板怎么用,就是16aspx上面下下来的模板,里面有个sln文件,其他全是文件夹的东西
.net写的程序模板一般都被写死了.那样只有通过程序改了.
- Fiddler在fiddler option设置还是抓不了HTTPS包解决办法
1:请在“运行”,即下面这个地方输入certmgr.msc并回车,打开证书管理. 打开后,请点击操作--查找证书,如下所示: 然后输入“fiddler”查找所有相关证书,如下所示: 可以看到,我们找到 ...
- bzoj 2843: 极地旅行社
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1077 Solved: 645[Submit][Status][Discuss] Descripti ...
- 值得收藏:一份非常完整的MySQL规范
一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...
- UIPanGestureRecognizer判断滑动的方向
.h文件 CGFloat const gestureMinimumTranslation = 20.0 ; typedef enum : NSInteger { kCameraMoveDirectio ...
- Linux内核分析 - 网络
http://blog.csdn.net/column/details/network-kernel-yoyo.html