【转载】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 ...
随机推荐
- 转:Java NIO(2)
java.nio包是Java在1.4之后增加的,用来提高I/O操作的效率.在nio包中主要包括以下几个类或接口: * Buffer:缓冲区,用来临时存放输入或输出数据. * Charset:用来把Un ...
- tcp nio 远程主机强迫关闭了一个现有的连接
import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import ...
- linq使用 count与sum等
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...
- Spring3.2+Struts2.3+Mybatis3.2整合使用(注解使用)
0.包结构:
- 关于asp.net中gridview的问题,关于footer,16aspx上下的英语交流网程序,管理员的添加和修改有问题
css部分 这是添加用户的方法 但是A.AdminName 和后面的A.取到的都是空值protected void GridView1_RowCommand(object sender,GridVie ...
- ActiveMQ StartUp
从http://activemq.apache.org/activemq-5132-release.html 下载 解压 从apache-activemq-5.13.2\bin\win64\wrapp ...
- Jmeter插件之PerfMon监控插件使用说明
PerfMon是Jmeter用来监控系统资源的一款插件,可以用来监控系统的cpu.内存.I/O等性能指标. 首先是Jmeter的插件安装,需要先下载JMeter Plugins Manager这个插件 ...
- ELK帮助文档
elasticsearch: API中文指南:https://es.xiaoleilu.com/010_Intro/15_API.html 官方文档:https://www.elastic.co/cn ...
- python 传不可变对象 or 可变对象
可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象 ...
- [51Nod1487]占领资源
题目大意: 有一个$n\times m(x,m\leq 100)$的网格图,每个格子有一个权值$w_{i,j}(1\leq w_{i,j}\leq 9)$.你可以在图中选两个格子,每个格子$(x,y ...