zoukankan      html  css  js  c++  java
  • loadrunner---<二>---菜鸟对cookie的思考

    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",
            "URL=http://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",
            "URL=http://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",
        "URL=http://mail.163.com/",
        "TargetFrame=",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        EXTRARES,
        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",
            "URL=http://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",
            "Referer=http://mail.163.com/",
            "Snapshot=t2.inf",
            LAST);
     
        web_url("163logo.gif",
            "URL=http://mimg.127.net/logo/163logo.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t3.inf",
            LAST);
     
        web_url("knet.png",
            "URL=http://mimg.127.net/logo/knet.png",
            "Resource=1",
            "RecContentType=image/png",
            "Referer=http://mail.163.com/",
            "Snapshot=t4.inf",
            LAST);
     
        web_url("netease_logo.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t6.inf",
            LAST);
     
        web_url("ntes.js",
            "URL=http://analytics.163.com/ntes.js",
            "Resource=1",
            "RecContentType=application/x-javascript",
            "Referer=http://mail.163.com/",
            "Snapshot=t8.inf",
            LAST);
     
        web_url("preload5.htm",
            "URL=http://mail.163.com/preload5.htm",
            "Resource=0",
            "RecContentType=text/html",
            "Referer=http://mail.163.com/",
            "Snapshot=t11.inf",
            "Mode=HTTP",
            LAST);
     
        web_concurrent_end(NULL);
     
        web_url("bg_v5.png",
            "Resource=1",
            "RecContentType=image/png",
            "Referer=http://mail.163.com/",
            "Snapshot=t5.inf",
            LAST);
     
        web_url("bg_httplogin.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t7.inf",
            LAST);
     
        web_concurrent_start(NULL);
     
        web_url("121116_dt_cnt2.jpg",
            "Resource=1",
            "RecContentType=image/jpeg",
            "Referer=http://mail.163.com/",
            "Snapshot=t9.inf",
            LAST);
     
        web_url("121116_dt_bg2.jpg",
            "Resource=1",
            "RecContentType=image/jpeg",
            "Referer=http://mail.163.com/",
            "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",
            "URL=http://mail.163.com/preload5.htm",
            "Resource=0",
            "RecContentType=text/html",
            "Referer=http://mail.163.com/",
            "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",
            "URL=http://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",
            "URL=http://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",
        "URL=http://mail.163.com/",
        "TargetFrame=",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        EXTRARES,
        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",
            "URL=http://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",
            "Referer=http://mail.163.com/",
            "Snapshot=t2.inf",
            LAST);
     
        web_url("163logo.gif",
            "URL=http://mimg.127.net/logo/163logo.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t3.inf",
            LAST);
     
        web_url("knet.png",
            "URL=http://mimg.127.net/logo/knet.png",
            "Resource=1",
            "RecContentType=image/png",
            "Referer=http://mail.163.com/",
            "Snapshot=t4.inf",
            LAST);
     
        web_url("netease_logo.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t6.inf",
            LAST);
     
        web_url("ntes.js",
            "URL=http://analytics.163.com/ntes.js",
            "Resource=1",
            "RecContentType=application/x-javascript",
            "Referer=http://mail.163.com/",
            "Snapshot=t8.inf",
            LAST);
     
        web_url("preload5.htm",
            "URL=http://mail.163.com/preload5.htm",
            "Resource=0",
            "RecContentType=text/html",
            "Referer=http://mail.163.com/",
            "Snapshot=t11.inf",
            "Mode=HTTP",
            LAST);
     
        web_concurrent_end(NULL);
     
        web_url("bg_v5.png",
            "Resource=1",
            "RecContentType=image/png",
            "Referer=http://mail.163.com/",
            "Snapshot=t5.inf",
            LAST);
     
        web_url("bg_httplogin.gif",
            "Resource=1",
            "RecContentType=image/gif",
            "Referer=http://mail.163.com/",
            "Snapshot=t7.inf",
            LAST);
     
        web_concurrent_start(NULL);
     
        web_url("121116_dt_cnt2.jpg",
            "Resource=1",
            "RecContentType=image/jpeg",
            "Referer=http://mail.163.com/",
            "Snapshot=t9.inf",
            LAST);
     
        web_url("121116_dt_bg2.jpg",
            "Resource=1",
            "RecContentType=image/jpeg",
            "Referer=http://mail.163.com/",
            "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",
            "URL=http://mail.163.com/preload5.htm",
            "Resource=0",
            "RecContentType=text/html",
            "Referer=http://mail.163.com/",
            "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抓下包,点击登陆请求那个包里面的连接,就可以直接登陆了。嘿嘿!!!

  • 相关阅读:
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
    【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新...
    【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
    【原】Coursera—Andrew Ng机器学习—Week 10 习题—大规模机器学习
    【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
    【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维
    【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM
  • 原文地址:https://www.cnblogs.com/anruy/p/4975516.html
Copyright © 2011-2022 走看看