http://www.cnblogs.com/Pierre-de-Ronsard/archive/2012/11/19/2772630.html
loadrunner---<二>---菜鸟对cookie的思考
lr是怎么将cookie添加到录制的脚本中的?lr中cookie是做什么的?
首先将解决两个疑问:
1--什么是cookie?--
Cookie是网站放置在硬盘上的程序。它们驻留在计算机上,用于收集有关您和您在互联网上执行的任何操作的信息,只要网站需要,就可以下载此Cookie收集的所有信息。
这些cookie是一些简单的文本文件,里面记录的内容一般是网站经过某些规则加密的文本。那这些文本都记录了什么?(以下是个人理解)这些cookie记录的一般是用户的相关信息,用户id,密码,session id,以及用户登录这个网站经常浏览的连接(再次登录时,网站会根据记录用户个人偏好的cookie,针对不同的用户,登录同一个网站,返回的页面有肯能是不同的,例如,申请了百度账号,并登陆过,再次登录百度 。还有一个现象,当我在购物网站浏览过一些商品时,退出购物网站,然后在浏览其他网页的时候,经常会有一些浮动的小广告,这些广告恰巧就是我关心的商品。
这些cookie文件放在了什么地方?假若你使用的是ie浏览器,工具->internet选项->常规->浏览器记录->设置->查看文件。打开的这个文件里面存放着你浏览过的网站在你的电脑里保存的cookie文件以及你的浏览器缓存的东西。存放目录一般为:C:\Documents and Settings\用户\Cookie
这些cookie文件是什么样子的?打开Cookie文件,名称大多是这样的:cookie:用户@cnblogs.com/(这个为博客园留在我的电脑里的cookie文件),类型为文本文件。双击打开,里面是写文本,只不过看不懂。
如果删除了这些cookie?如果用户设置了浏览器记历史录为:退出时删除。那么当你关闭ie时,里面的缓存内容就会被清除掉,若不删除,缓存多了,所占空间就越大,多以,及时删除缓存是必要的。删除cookie后,在登陆一些网站后,就是你第一次访问这个网站的情形一样,没有为你添好的用户名,曾经设置了自动登录,登陆时也不会重新登录了。
2--cookie是怎么工作的?--
详解参考:http://www.elecfans.com/dianzichangshi/2009080483037.html
http://baike.baidu.com/view/835.htm
登陆网站的时候,网站是如何获取它保留在电脑里的cookie的?
如果在浏览器中键入URL = http://mail.163.com,浏览器是如何访问到这个网页的?浏览器不仅仅是只是发送了这个访问页面的请求,他还将这个网站留在电脑中的某些cookie一并的发送给http://mail.163.com这个网站:这些cookie加在了http请求的消息头中。以loadrunner录制163的邮箱登陆为例:
下面的这个请求是,loadrunner录制的登陆mail.163.com http请求的消息头,里面包含了浏览器从本地读取的cookie
GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Host: mail.163.com Connection: Keep-Alive Cookie: nts_mail_user=163useraccount:-1:1; mail_popup=; _ntes_nnid=; _ntes_nuid=; <a href= "mailto:P_INFO=163useraccount@163.com%7C-%7C0%7Cmail163%7C11&19%7Cbej&1-&mail163#bej&null#10#0#0|-" >P_INFO=163useraccount@163.com|<span style= "color: #000000;" >-</span>|0|mail163|11&19|bej&1-&mail163#bej&null#10#0#0|-</a>; USERTRACK=1-------
|
(个人观点)在使用loadrunner录制脚本的时候为什么会录到 wed_add_cookie这些东西?loadrunner录制时,当检测到并记录http请求消息头中携带的cookie,然后在生成脚本的时候,将记录的这些cookie添加在对应这个http请求前面。在generation log中,http请求响应结束后会有log message,在logmessage后面记录了lr在脚本中加入cookie的痕迹
****** Start Log Message ****** Start Frames Hierarchy Tree Dump The Node has no URL End Frames Hierarchy Tree Dump $$$$$$ End Log Message $$$$$$ ****** Add Event For Transaction With Id 5 ****** (Location Flag : tFlagInsertEnd, Location ID : 5) web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
LAST);
$$$$$$ Add Event For Transaction With Id 5 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "nts_mail_user=------:-1:1; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "mail_popup=----; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "_ntes_nnid=------; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "_ntes_nuid=-------; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "P_INFO=----------; DOMAIN=mail.163.com" );
。。。 。。。。 |
cookie是如何被浏览器保存在本地的?cookie是通过网站的http响应头携带,网站把他希望存放的信息通过set-cookie的方式保存在用户本地
****** Response Header For Transaction With Id 57 ****** HTTP/1.1 200 OK Cache-Control: max-age=0 Content-Length: 11245 Content-Type: text/html; charset=utf-8 Expires: Fri, 16 Nov 2012 03:29:48 GMT Server: Microsoft-IIS/7.5 P3P: CP= "DSP CUR OTPi IND OTRi ONL FIN"
X-XSS-Protection: 0 X-Content-Type-Options: nosniff Set-Cookie: MSPRequ=lt=----&co=1&id=64855; path=/;version=1 X-Frame-Options: deny PPServer: PPV: 30 H: BAYIDSLGN1E39 V: 0 Date: Fri, 16 Nov 2012 03:30:48 GMT Connection: close $$$$$$ Response Header For Transaction With Id 57 Ended $$$$$$ |
****** Response Header For Transaction With Id 75 ****** HTTP/1.1 200 OK Server: nginx Date: Fri, 16 Nov 2012 03:32:16 GMT Content-Type: text/html; charset=utf-8 Content-Length: 279 Connection: keep-alive Cache-Control: private
P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
Set-Cookie: SID=-----; domain=reg.163.com; path=/ Set-Cookie: JSESSIONID=----; path=/ Cache-Control: max-age=0 $$$$$$ Response Header For Transaction With Id 75 Ended $$$$$$ |
既然浏览器会从本地读取cookie那么,lr为什么还要在录制的脚本中添加web_add_cookie?做个试验,清除所有的cookie文件,然后录制www.mail.163的邮箱登陆
这时lr录制的访问www.163.com的http消息头中是没有cookie的
****** Request Header For Transaction With Id 5 ****** GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Host: mail.163.com Connection: Keep-Alive $$$$$$ Request Header For Transaction With Id 5 Ended $$$$$$ |
下面看一下add event 中的内容,从上面可以看到,如果本地读到了cookie文件,在add event中,会添加cookie
****** Start Log Message ****** Start Frames Hierarchy Tree Dump The Node has no URL End Frames Hierarchy Tree Dump $$$$$$ End Log Message $$$$$$ ****** Add Event For Transaction With Id 5 ****** (Location Flag : tFlagInsertEnd, Location ID : 5) web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
LAST);
$$$$$$ Add Event For Transaction With Id 5 Ended $$$$$$ ****** Request Header For Transaction With Id 8 ****** GET /favicon.ico HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate-------------- |
add event中是空的
但是,录制结束后,生成的脚本中,在访问www.163.com请求之前,仍会出现web_add_cookie,这是为什么?
web_add_cookie( "_ntes_nnid=----; DOMAIN=analytics.163.com" );
web_add_cookie( "_ntes_nnid=----; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "starttime=; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "logType=; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "__ntes__test__cookies=---; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "lo=%u5317%u4EAC%u5E02; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "lc=; DOMAIN=iplocator.mail.163.com" );
web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
EXTRARES,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/css/base64_compress.css" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/js/p0.js" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/js/p1.js" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
LAST);
|
其中,EXTRARES后面的这些Url是什么?先看看web_url这个函数:
int web_url( const char *StepName, const char *url, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );
其中,EXTRARES是个分隔符,他后面的东西是访问这个页面时,要下载的资源(由于web_url默认使用的是HTML Mode的模式,所以你录好的脚本中是否有EXTRARES,在脚本回放的时候,都会默认下载HTML所对应的资源)
上面脚本若选用URL-based录制,那么方位www.mail.com的请求就会变成下面的这个样子
web_url( "mail.163.com" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTTP" ,
LAST);
web_concurrent_start(NULL);
web_url( "base_v2.js" ,
"Resource=1" ,
"RecContentType=application/x-javascript" ,
"Snapshot=t2.inf" ,
LAST);
web_url( "163logo.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t3.inf" ,
LAST);
web_url( "knet.png" ,
"Resource=1" ,
"RecContentType=image/png" ,
"Snapshot=t4.inf" ,
LAST);
web_url( "netease_logo.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t6.inf" ,
LAST);
web_url( "ntes.js" ,
"Resource=1" ,
"RecContentType=application/x-javascript" ,
"Snapshot=t8.inf" ,
LAST);
web_url( "preload5.htm" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Snapshot=t11.inf" ,
"Mode=HTTP" ,
LAST);
web_concurrent_end(NULL);
web_url( "bg_v5.png" ,
"Resource=1" ,
"RecContentType=image/png" ,
"Snapshot=t5.inf" ,
LAST);
web_url( "bg_httplogin.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t7.inf" ,
LAST);
web_concurrent_start(NULL);
web_url( "121116_dt_cnt2.jpg" ,
"Resource=1" ,
"RecContentType=image/jpeg" ,
"Snapshot=t9.inf" ,
LAST);
web_url( "121116_dt_bg2.jpg" ,
"Resource=1" ,
"RecContentType=image/jpeg" ,
"Snapshot=t10.inf" ,
LAST);
web_concurrent_end(NULL);
|
这种录制的方法,将对每个资源的下载,放在单独的web_url()中去提交,(这里说一下web_concurrent_start与web_concurrent_end之间的web_url是并行提交的,他的提交顺序,并不是你再脚本中看到的由上至下顺序提交的)
说这些是为了说明为什么在没有cookie的时候,录制的时候会在访问mail.163.com前面出现add_web_cookie()?看下上面代码的generation log就知道了
****** Add Event For Transaction With Id 27 ****** (Location Flag : tFlagInsertAfter, Location ID : 22) web_url( "preload5.htm" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Snapshot=t9.inf" ,
"Mode=HTTP" ,
LAST);
$$$$$$ Add Event For Transaction With Id 27 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 1000005) web_add_cookie( "starttime=; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 1000005) web_add_cookie( "logType=; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended$$$$$$ |
从上面的日志中看到,因为在某些请求资源的web_url()中添加了cookie。这些请求的web_url()的顺序是并发,多以看到这些添加cookie的位置也不同
3--lr脚本回放时,是在本地读取cookie 还是直接使用脚本中的cookie?--
现在新的问题出现了,好多人在录制脚本时,会遇到这样的问题:当有些时候把脚本中的cookie删掉,在回放脚本的时候会出现错误。
既然在访问网站的时候,网站会将cookie保存在用户本地,那么在lr提交请求的时候,lr会在本地读取cookie文件,与脚本中有没有cookie有什么关系???
(前提,将本地的cookie文件全部删除)做个实验,在录制好登陆mail.163.com,(录制脚本结束后,本地就会有新的cookie文件生成,163登陆的脚本中只需要关联id就可以登陆成功)并可以回放成功。然后将cookie文件再全部删除,在回放脚本,脚本可以回放成功。
因为这个脚本中的cookie与能否成功没有直接的关系(只是些资源,有效期之类的),脚本回放时,每次都向163网站提供用户名及密码,所以脚本中没有这些cookie也可以登录成功。
(前提:本地没有cookie文件,登录邮箱,并设置163邮箱的自动登录选项,登录后退出,这是本地已经有了cookie文件)再做个试验,在地址栏中直接输入:mail.163.com,这种情况下是可以自动登录成功的。然后录制自动登录的脚本,修改脚本(同样,只需要关联session id),回放脚本,这用情况下也是可以登陆成功。将脚本中的cookie全部注释掉,回放脚本,是否能登陆成功?删掉本地cookie文件。重新在地址栏中输入mail.163.com,这时登陆邮箱失败。取消对lr中队cookie的注释,回放脚本,这是登陆是否成功?
先来看一下自动登录脚本中的cookie是什么样子的
web_add_cookie( "starttime=; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_style=js5; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_uid=yuxiaocao_07@163.com; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_popup=a24; DOMAIN=count.mail.163.com" );
web_add_cookie( "_ntes_nnid=------------,--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "_ntes_nuid=-------------; DOMAIN=count.mail.163.com" );
web_add_cookie( "NTES_PASSPORT=--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "P_INFO=--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "USERTRACK=-----; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_host=-----; DOMAIN=count.mail.163.com" );
|
这个cookie与提交用户和用户名登陆的脚本中有些不一样的地方:
web_add_cookie("NTES_PASSPORT=--------; DOMAIN=count.mail.163.com");------这个就是你能否直接成功登陆的cookie
若将这个cookie注释掉,即使,本地有cookie文件,脚本回放也是失败的(只要有本地有cookie文件,就可以在IE中直接登录邮箱)。将本地的cookie文件删除,这时在IE肯定是无法登陆邮
loadrunner---<二>---菜鸟对cookie的思考
lr是怎么将cookie添加到录制的脚本中的?lr中cookie是做什么的?
首先将解决两个疑问:
1--什么是cookie?--
Cookie是网站放置在硬盘上的程序。它们驻留在计算机上,用于收集有关您和您在互联网上执行的任何操作的信息,只要网站需要,就可以下载此Cookie收集的所有信息。
这些cookie是一些简单的文本文件,里面记录的内容一般是网站经过某些规则加密的文本。那这些文本都记录了什么?(以下是个人理解)这些cookie记录的一般是用户的相关信息,用户id,密码,session id,以及用户登录这个网站经常浏览的连接(再次登录时,网站会根据记录用户个人偏好的cookie,针对不同的用户,登录同一个网站,返回的页面有肯能是不同的,例如,申请了百度账号,并登陆过,再次登录百度 。还有一个现象,当我在购物网站浏览过一些商品时,退出购物网站,然后在浏览其他网页的时候,经常会有一些浮动的小广告,这些广告恰巧就是我关心的商品。
这些cookie文件放在了什么地方?假若你使用的是ie浏览器,工具->internet选项->常规->浏览器记录->设置->查看文件。打开的这个文件里面存放着你浏览过的网站在你的电脑里保存的cookie文件以及你的浏览器缓存的东西。存放目录一般为:C:\Documents and Settings\用户\Cookie
这些cookie文件是什么样子的?打开Cookie文件,名称大多是这样的:cookie:用户@cnblogs.com/(这个为博客园留在我的电脑里的cookie文件),类型为文本文件。双击打开,里面是写文本,只不过看不懂。
如果删除了这些cookie?如果用户设置了浏览器记历史录为:退出时删除。那么当你关闭ie时,里面的缓存内容就会被清除掉,若不删除,缓存多了,所占空间就越大,多以,及时删除缓存是必要的。删除cookie后,在登陆一些网站后,就是你第一次访问这个网站的情形一样,没有为你添好的用户名,曾经设置了自动登录,登陆时也不会重新登录了。
2--cookie是怎么工作的?--
详解参考:http://www.elecfans.com/dianzichangshi/2009080483037.html
http://baike.baidu.com/view/835.htm
登陆网站的时候,网站是如何获取它保留在电脑里的cookie的?
如果在浏览器中键入URL = http://mail.163.com,浏览器是如何访问到这个网页的?浏览器不仅仅是只是发送了这个访问页面的请求,他还将这个网站留在电脑中的某些cookie一并的发送给http://mail.163.com这个网站:这些cookie加在了http请求的消息头中。以loadrunner录制163的邮箱登陆为例:
下面的这个请求是,loadrunner录制的登陆mail.163.com http请求的消息头,里面包含了浏览器从本地读取的cookie
GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Host: mail.163.com Connection: Keep-Alive Cookie: nts_mail_user=163useraccount:-1:1; mail_popup=; _ntes_nnid=; _ntes_nuid=; <a href= "mailto:P_INFO=163useraccount@163.com%7C-%7C0%7Cmail163%7C11&19%7Cbej&1-&mail163#bej&null#10#0#0|-" >P_INFO=163useraccount@163.com|<span style= "color: #000000;" >-</span>|0|mail163|11&19|bej&1-&mail163#bej&null#10#0#0|-</a>; USERTRACK=1-------
|
(个人观点)在使用loadrunner录制脚本的时候为什么会录到 wed_add_cookie这些东西?loadrunner录制时,当检测到并记录http请求消息头中携带的cookie,然后在生成脚本的时候,将记录的这些cookie添加在对应这个http请求前面。在generation log中,http请求响应结束后会有log message,在logmessage后面记录了lr在脚本中加入cookie的痕迹
****** Start Log Message ****** Start Frames Hierarchy Tree Dump The Node has no URL End Frames Hierarchy Tree Dump $$$$$$ End Log Message $$$$$$ ****** Add Event For Transaction With Id 5 ****** (Location Flag : tFlagInsertEnd, Location ID : 5) web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
LAST);
$$$$$$ Add Event For Transaction With Id 5 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "nts_mail_user=------:-1:1; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "mail_popup=----; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "_ntes_nnid=------; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "_ntes_nuid=-------; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 5) web_add_cookie( "P_INFO=----------; DOMAIN=mail.163.com" );
。。。 。。。。 |
cookie是如何被浏览器保存在本地的?cookie是通过网站的http响应头携带,网站把他希望存放的信息通过set-cookie的方式保存在用户本地
****** Response Header For Transaction With Id 57 ****** HTTP/1.1 200 OK Cache-Control: max-age=0 Content-Length: 11245 Content-Type: text/html; charset=utf-8 Expires: Fri, 16 Nov 2012 03:29:48 GMT Server: Microsoft-IIS/7.5 P3P: CP= "DSP CUR OTPi IND OTRi ONL FIN"
X-XSS-Protection: 0 X-Content-Type-Options: nosniff Set-Cookie: MSPRequ=lt=----&co=1&id=64855; path=/;version=1 X-Frame-Options: deny PPServer: PPV: 30 H: BAYIDSLGN1E39 V: 0 Date: Fri, 16 Nov 2012 03:30:48 GMT Connection: close $$$$$$ Response Header For Transaction With Id 57 Ended $$$$$$ |
****** Response Header For Transaction With Id 75 ****** HTTP/1.1 200 OK Server: nginx Date: Fri, 16 Nov 2012 03:32:16 GMT Content-Type: text/html; charset=utf-8 Content-Length: 279 Connection: keep-alive Cache-Control: private
P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
Set-Cookie: SID=-----; domain=reg.163.com; path=/ Set-Cookie: JSESSIONID=----; path=/ Cache-Control: max-age=0 $$$$$$ Response Header For Transaction With Id 75 Ended $$$$$$ |
既然浏览器会从本地读取cookie那么,lr为什么还要在录制的脚本中添加web_add_cookie?做个试验,清除所有的cookie文件,然后录制www.mail.163的邮箱登陆
这时lr录制的访问www.163.com的http消息头中是没有cookie的
****** Request Header For Transaction With Id 5 ****** GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Host: mail.163.com Connection: Keep-Alive $$$$$$ Request Header For Transaction With Id 5 Ended $$$$$$ |
下面看一下add event 中的内容,从上面可以看到,如果本地读到了cookie文件,在add event中,会添加cookie
****** Start Log Message ****** Start Frames Hierarchy Tree Dump The Node has no URL End Frames Hierarchy Tree Dump $$$$$$ End Log Message $$$$$$ ****** Add Event For Transaction With Id 5 ****** (Location Flag : tFlagInsertEnd, Location ID : 5) web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
LAST);
$$$$$$ Add Event For Transaction With Id 5 Ended $$$$$$ ****** Request Header For Transaction With Id 8 ****** GET /favicon.ico HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate-------------- |
add event中是空的
但是,录制结束后,生成的脚本中,在访问www.163.com请求之前,仍会出现web_add_cookie,这是为什么?
web_add_cookie( "_ntes_nnid=----; DOMAIN=analytics.163.com" );
web_add_cookie( "_ntes_nnid=----; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "starttime=; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "logType=; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "__ntes__test__cookies=---; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "lo=%u5317%u4EAC%u5E02; DOMAIN=iplocator.mail.163.com" );
web_add_cookie( "lc=; DOMAIN=iplocator.mail.163.com" );
web_url( "mail.163.com" ,
"TargetFrame=" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTML" ,
EXTRARES,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/css/base64_compress.css" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/js/p0.js" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
"Url=http://mimg.127.net/p/js5/5.0.0b1211141530/js/p1.js" , "Referer=http://mail.163.com/preload5.htm" , ENDITEM,
LAST);
|
其中,EXTRARES后面的这些Url是什么?先看看web_url这个函数:
int web_url( const char *StepName, const char *url, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );
其中,EXTRARES是个分隔符,他后面的东西是访问这个页面时,要下载的资源(由于web_url默认使用的是HTML Mode的模式,所以你录好的脚本中是否有EXTRARES,在脚本回放的时候,都会默认下载HTML所对应的资源)
上面脚本若选用URL-based录制,那么方位www.mail.com的请求就会变成下面的这个样子
web_url( "mail.163.com" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Referer=" ,
"Snapshot=t1.inf" ,
"Mode=HTTP" ,
LAST);
web_concurrent_start(NULL);
web_url( "base_v2.js" ,
"Resource=1" ,
"RecContentType=application/x-javascript" ,
"Snapshot=t2.inf" ,
LAST);
web_url( "163logo.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t3.inf" ,
LAST);
web_url( "knet.png" ,
"Resource=1" ,
"RecContentType=image/png" ,
"Snapshot=t4.inf" ,
LAST);
web_url( "netease_logo.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t6.inf" ,
LAST);
web_url( "ntes.js" ,
"Resource=1" ,
"RecContentType=application/x-javascript" ,
"Snapshot=t8.inf" ,
LAST);
web_url( "preload5.htm" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Snapshot=t11.inf" ,
"Mode=HTTP" ,
LAST);
web_concurrent_end(NULL);
web_url( "bg_v5.png" ,
"Resource=1" ,
"RecContentType=image/png" ,
"Snapshot=t5.inf" ,
LAST);
web_url( "bg_httplogin.gif" ,
"Resource=1" ,
"RecContentType=image/gif" ,
"Snapshot=t7.inf" ,
LAST);
web_concurrent_start(NULL);
web_url( "121116_dt_cnt2.jpg" ,
"Resource=1" ,
"RecContentType=image/jpeg" ,
"Snapshot=t9.inf" ,
LAST);
web_url( "121116_dt_bg2.jpg" ,
"Resource=1" ,
"RecContentType=image/jpeg" ,
"Snapshot=t10.inf" ,
LAST);
web_concurrent_end(NULL);
|
这种录制的方法,将对每个资源的下载,放在单独的web_url()中去提交,(这里说一下web_concurrent_start与web_concurrent_end之间的web_url是并行提交的,他的提交顺序,并不是你再脚本中看到的由上至下顺序提交的)
说这些是为了说明为什么在没有cookie的时候,录制的时候会在访问mail.163.com前面出现add_web_cookie()?看下上面代码的generation log就知道了
****** Add Event For Transaction With Id 27 ****** (Location Flag : tFlagInsertAfter, Location ID : 22) web_url( "preload5.htm" ,
"Resource=0" ,
"RecContentType=text/html" ,
"Snapshot=t9.inf" ,
"Mode=HTTP" ,
LAST);
$$$$$$ Add Event For Transaction With Id 27 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 1000005) web_add_cookie( "starttime=; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended $$$$$$ ****** Add Event For Transaction With Id 0 ****** (Location Flag : tFlagInsertBefore, Location ID : 1000005) web_add_cookie( "logType=; DOMAIN=mail.163.com" );
$$$$$$ Add Event For Transaction With Id 0 Ended$$$$$$ |
从上面的日志中看到,因为在某些请求资源的web_url()中添加了cookie。这些请求的web_url()的顺序是并发,多以看到这些添加cookie的位置也不同
3--lr脚本回放时,是在本地读取cookie 还是直接使用脚本中的cookie?--
现在新的问题出现了,好多人在录制脚本时,会遇到这样的问题:当有些时候把脚本中的cookie删掉,在回放脚本的时候会出现错误。
既然在访问网站的时候,网站会将cookie保存在用户本地,那么在lr提交请求的时候,lr会在本地读取cookie文件,与脚本中有没有cookie有什么关系???
(前提,将本地的cookie文件全部删除)做个实验,在录制好登陆mail.163.com,(录制脚本结束后,本地就会有新的cookie文件生成,163登陆的脚本中只需要关联id就可以登陆成功)并可以回放成功。然后将cookie文件再全部删除,在回放脚本,脚本可以回放成功。
因为这个脚本中的cookie与能否成功没有直接的关系(只是些资源,有效期之类的),脚本回放时,每次都向163网站提供用户名及密码,所以脚本中没有这些cookie也可以登录成功。
(前提:本地没有cookie文件,登录邮箱,并设置163邮箱的自动登录选项,登录后退出,这是本地已经有了cookie文件)再做个试验,在地址栏中直接输入:mail.163.com,这种情况下是可以自动登录成功的。然后录制自动登录的脚本,修改脚本(同样,只需要关联session id),回放脚本,这用情况下也是可以登陆成功。将脚本中的cookie全部注释掉,回放脚本,是否能登陆成功?删掉本地cookie文件。重新在地址栏中输入mail.163.com,这时登陆邮箱失败。取消对lr中队cookie的注释,回放脚本,这是登陆是否成功?
先来看一下自动登录脚本中的cookie是什么样子的
web_add_cookie( "starttime=; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_style=js5; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_uid=yuxiaocao_07@163.com; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_popup=a24; DOMAIN=count.mail.163.com" );
web_add_cookie( "_ntes_nnid=------------,--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "_ntes_nuid=-------------; DOMAIN=count.mail.163.com" );
web_add_cookie( "NTES_PASSPORT=--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "P_INFO=--------; DOMAIN=count.mail.163.com" );
web_add_cookie( "USERTRACK=-----; DOMAIN=count.mail.163.com" );
web_add_cookie( "mail_host=-----; DOMAIN=count.mail.163.com" );
|
这个cookie与提交用户和用户名登陆的脚本中有些不一样的地方:
web_add_cookie("NTES_PASSPORT=--------; DOMAIN=count.mail.163.com");------这个就是你能否直接成功登陆的cookie
若将这个cookie注释掉,即使,本地有cookie文件,脚本回放也是失败的(只要有本地有cookie文件,就可以在IE中直接登录邮箱)。将本地的cookie文件删除,这时在IE肯定是无法登陆邮箱。那回放脚本呢?取消脚本中对cookie的注释,再次回放,成功登陆。
通过以上实验,可以发现在回放lr的脚本时,脚本是不读本地文件的,因为他已经将本地的cookie在生成脚本的时候添加到脚本中了,所以有些时候删掉cookie可以成功回放,但是删掉与以后操作步骤有关联的cookie,回放就会失败。
总结如下:
1:访问一个网站时,浏览器(IE)将访问请求与本地的cookie(cookie存放在http请求的消息头中)一起发送到该网站的服务器
2:lr在生成脚本时,会将录到的http请求消息头中的cookie添加到脚本中,即add_web_cookie()
3:网站通过http响应消息头中的Set-Cookie将cookie保存在用户本地
4:lr在脚本回放时,不再读取本地cookie文件,而是使用脚本中的cookie,即,脚本中的add_web_cookie(),lr回放时也不会生成新的cookie文件(因为cookie文件的生成时针对浏览器的,所以lr回放时只是模拟浏览器的发包,所以他不会去读或者写cookie文件,他的add_web_cookie()只是模拟浏览器的cookie行为)
5:mail.163.com在提交登陆请求时,使用的是明文的密码,用wireshark抓下包,点击登陆请求那个包里面的连接,就可以直接登陆了。嘿嘿!!!
箱。那回放脚本呢?取消脚本中对cookie的注释,再次回放,成功登陆。
通过以上实验,可以发现在回放lr的脚本时,脚本是不读本地文件的,因为他已经将本地的cookie在生成脚本的时候添加到脚本中了,所以有些时候删掉cookie可以成功回放,但是删掉与以后操作步骤有关联的cookie,回放就会失败。
总结如下:
1:访问一个网站时,浏览器(IE)将访问请求与本地的cookie(cookie存放在http请求的消息头中)一起发送到该网站的服务器
2:lr在生成脚本时,会将录到的http请求消息头中的cookie添加到脚本中,即add_web_cookie()
3:网站通过http响应消息头中的Set-Cookie将cookie保存在用户本地
4:lr在脚本回放时,不再读取本地cookie文件,而是使用脚本中的cookie,即,脚本中的add_web_cookie(),lr回放时也不会生成新的cookie文件(因为cookie文件的生成时针对浏览器的,所以lr回放时只是模拟浏览器的发包,所以他不会去读或者写cookie文件,他的add_web_cookie()只是模拟浏览器的cookie行为)
5:mail.163.com在提交登陆请求时,使用的是明文的密码,用wireshark抓下包,点击登陆请求那个包里面的连接,就可以直接登陆了。嘿嘿!!!
loadrunner---<二>---菜鸟对cookie的思考的更多相关文章
-
Java EE : 二、图解 Cookie(小甜饼)
目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...
-
hadoop 二次排序的一些思考
先说一下mr的二次排序需求: 假如文件有两列分别为name.score,需求是先按照name排序,name相同按照score排序 数据如下: jx 20 gj 30 jx 10 gj 15 输出结果要 ...
-
JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
-
loadrunner 事务、同步点和思考时间
事务 在LoadRunner里,我们定义事务主要是为了度量服务器的性能.每个事务度量服务器响应指定的Vuser请求所有的时间,这些请求可以是简单任务,也可以是复杂任务. 要度量事务,需要插入Vuser ...
-
jmeter(十二)处理Cookie与Session
JMeter的工作原理是: JMeter可以作为Web服务器与浏览器之间的代理网关,以便捕获浏览器的请求和Web服务器的响应,这样就很容易地生成性能测试脚本, 有了性能测试脚本,JMeter就可以通过 ...
-
loadrunner设置Analysis分析时去掉思考时间
在进行对loadrunner进行执行脚本的情况下,那么就需要在脚本中进行添加为思考时间,这样才更符合人为的脚本时间,那么在进行执行压力的过程中,思考时间是需要开启的,完成之后为了便于分析那么就需要把思 ...
-
ASP.NET Core学习之二 菜鸟踩坑
对于像我这样没接触过core的人,坑还是比较多的,一些基础配置和以前差别很大,这里做下记录 一.Startup 1.注册服务 // This method gets called by the run ...
-
Python 爬虫(二十五) Cookie的处理--cookielib库的使用
Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持. 该模块主要功能是提供可存储cookie的对象.使用此模块捕获cookie并 ...
-
Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放
1. 操作Cookie 有时候我们想要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删 ...
随机推荐
-
[笔记]kubernetes 无法启动问题
在启动kubernetes的时候报错误. ERROR: timed out for http://localhost:4001/v2/keys/ 原因是无法启动etcd, etcd 监听4001本地端 ...
-
Mac地址
Mac地址是每张网卡的唯一标识符,也叫物理地址.硬件地址或链路地址,由网络设备制造商生产时烧在网卡的ROM中,可以修改.现在的Mac地址一般都采用6字节48bit(还有2字节16bit的Mac地址,多 ...
-
用Unity开发HTC VIVE——手柄控制篇
写这篇文章的原因主要是因为现在虚拟现实非常的火爆但目前主流的虚拟现实设备(HTC VIVE)的教程却少的可怜,这个我深有体会.所以,我想将我平时开发中遇到的问题以及解决方法记录下来,分享给大家,若其中 ...
-
Linux下查看用户列表
cat /etc/passwd 可以查看所有用户的列表 w 可以查看当前活跃的用户列表 cat /etc/group 查看用户组
-
C语言 文件读取
FILE *fp = fopen("data.txt","rt");fscanf(fp,"%d", &n ); /* 把数据放到数组 ...
-
Fatal error: Class &#39;ZipArchive&#39; not found的解决办法
今天在Linux底下编写导出EXCEL文件并显示输出时,抛出“ZipArchive library is not enabled” 的异常.而我在本地的windows下的代码则是运行正常的. 原因是: ...
-
Oracle数据库之事务
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...
-
C#中通过位运算实现多个状态的判断
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
-
DBA查询命令积累——不断更新
原文:DBA查询命令积累--不断更新 一.服务器配置: 1.兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为. 1.1.查看数据库兼容级别及更改兼容级别: SELECT com ...
-
jenkins主要目录用途
主目录 除了Jenkins的WAR包所在目录,Jenkins还有一个更重要的目录——Jenkins的所有重要数据都存放在这个独立的目录中,称为Jenkins主目录,它的默认位置是在当前用户根目录的隐藏 ...