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抓下包,點擊登陸請求那個包里面的連接,就可以直接登陸了。嘿嘿!!!