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抓下包,点击登陆请求那个包里面的连接,就可以直接登陆了。嘿嘿!!!

  • 相关阅读:
    各数据库连接maven配置
    在 windows 下配置 git 公共库
    java笔记2(观察者模式、内部类、输入输出)
    linux 常用命令的应用笔记
    Setting Up Google Code And Github With Git
    java笔记3(单元测试中的模式)
    Apache的配置
    Ubuntu安装常用工具
    MongoDB笔记1(安装配置、用户管理、查询与SQL比较)
    Redis的安装与配置
  • 原文地址:https://www.cnblogs.com/anruy/p/4975516.html
Copyright © 2011-2022 走看看