oadrunner web_add_cookie
web_add_cookie 這個的函數原來真的能過逃過登錄,哈哈,這個苦苦糾結我的問題呀。
函數原型:int web_add_cookie( const char *Cookie);
其中 cookie參數列表格式添加如下:Defines the cookie to add or modify. The Cookie parameter has the following format:
name=VALUE; (required) //需要添加的cookie變量名=變量值,必須有
domain=DOMAIN_NAME; (required) 需要cookie的域名,必須有
expires=DATE; 失效日期 可以可無,最好有。 又錯了,該字段是根據服務端設置的,服務端設置可以保存多長時間,就保存多長時間,Lr在模擬時該時間一般要在服務端允許的時間范圍內,但是不在范圍內好像也不報錯,估計也不會有用,有的cookie是根據session來的,比如截圖中的cookie有效期為end of session,意思就是session死了,cookie也就失效了,所以你設置再長時間也沒有用啦。
path=PATH; (default path is "/") cookie路徑,默認是當前路徑還是根目錄呀?這個/目錄到底是哪里呢? 都不是,該path路徑的意思是cookie的適應范圍,/代表該cookie從該程序的根目錄起適用。這個也是要根據服務端設置來的,看截圖的path路徑為/,表示呀該cookie從該應用的根目錄開始適用,lr中按照此設置即可,當然也可以設置成根目錄以下的目錄,可是你客戶端怎么知道根目錄以下還有哪些目錄呢?哈哈,所以這能照抄服務端返回的目錄啦。
使用辦法,在firefox瀏覽器中運行一次實際的登錄過程,登錄過程中開啟httpfox插件,獲取接受到的cookies各個字段的值,然后加到lr的初始化里(vuser_init()),繞過登錄。
代碼如下:
web_add_cookie ("tonido-login-seed-10001=588831e0-2d20-43bf-8aad-979590571e68; path=/; expires=Wednesday, 09–Nov–2011 23:12:40 GMT; domain=kortide.tonidoid.com");
web_add_cookie ("tonido-login-hash-10001=df420fa77e1facf1c5ad1d3de3b5ee007bffcf09; path=/; expires=Wednesday, 09–Nov–2021 23:12:40 GMT; domain=kortide.tonidoid.com");
web_add_cookie ("tonido-login-user-10001=kortide@tonidoid.com; path=/; expires=Wednesday, 09–Nov–2011 23:12:40 GMT; domain=kortide.tonidoid.com");
參數里的name,value,path,domain的值都是可以直接從httpfox中獲取到的,至於expires你可以隨便寫,只要是未來時間即可。具體可看截圖哈。
添加完cookie后,那些需要登錄后才能進行的操作,再也不用登錄后再操作了,因為登錄實在是太消耗時間了, 測試時遇到tonidoid只能同時登錄5個用戶的限制,我想做超過5個用戶的並發場景,一直模擬不出來,這下應該能解決了,一會試試。
千真萬確,解決了,哈哈。
http://tbaike.com/index.php?category-view-6.html 一個測試類的網站
又嘗試寫了一個函數自動獲取頁面換回的cookie:
int login(char cookies[10][100] )
{
char cookie[50]; // The formatted value of outFlightParam
int len,i;
web_reg_save_param("cookie",
"LB=Set-Cookie:",
"RB=HttpOnly",
"ORD=ALL",
"Search=headers",
LAST);
web_custom_request("loginprofile",
"URL=http://url",
"Method=POST",
"Resource=0",
"RecContentType=text/xml",
"Mode=HTML",
"EncType=text/plain; charset=utf-8",
"Body=profile={profile}&safemode=0&autologin=1&password={password}",
LAST);
len=atoi(lr_eval_string("{cookie_count}"));
for (i=1;i<=len;i++) {
sprintf(cookie,"{cookie_%d}",i);
sprintf(cookies[i-1],"%s",lr_eval_string(cookie));
lr_output_message("cookies %s",cookies[i-1]);
}
結果ok~~
包含cookie的頭一般如下:(Status-Line) HTTP/1.1 200 OK
Cache-Control private, no-cache, no-store, proxy-revalidate
Connection Close
Content-Length 102
Content-Type text/xml; charset=utf-8
Date Tue, 23 Aug 2011 06:10:10 GMT
Pragma no-cache
Set-Cookie tonido-login-seed-10001=fee60fe9-a70d-4936-aeac-64f27fdc21a2; path=/; HttpOnly
Set-Cookie tonido-login-hash-10001=9a82fb6088db8b05fa4e6f6b973c28d02383c954; path=/; HttpOnly
Set-Cookie tonido-login-user-10001=kortide@tonidoid.com; path=/; HttpOnly