用LoadRunner下載文件并保存到本地
論壇上經常有人問起,如何讓 LoadRunner 可以下載文件并保存在本地。 初看起來,這個問題應該不是問題:LoadRunner錄制的是Client(瀏覽器)和 服務器 之間的交互,自然也就能記錄到下載文件的動作和收到下載文件的全部內容,但如果真用LoadRunner去嘗試這樣
論壇上經常有人問起,如何讓
LoadRunner可以下載文件并保存在本地。
初看起來,這個問題應該不是問題:LoadRunner錄制的是Client(瀏覽器)和服務器之間的交互,自然也就能記錄到下載文件的動作和收到下載文件的全部內容,但如果真用LoadRunner去嘗試這樣一個工作,卻會發現在LoadRunner錄制的腳本中根本沒有任何與下載文件相關的語句。
其實,在HTTP協議中,本來就沒有任何一個方法或是動作能夠標識“下載文件”這個動作,對HTTP協議來說,下載文件或是請求頁面,都只是一個GET方法,至于說我們下載文件時看到的那個提示我們給出用戶名的對話框,那完全是客戶端自身判斷到我們請求的是一個文件而自行處理的。
那么,究竟該如何才能讓LoadRunner完成這個工作呢?
通過上面的分析,我們已經知道了這樣一些事實:
1、文件請求是通過GET方法請求的;
2、LoadRunner已經記錄了客戶端發出的對文件的請求,并能夠收到文件內容;
因此,我們完全可以通過關聯的方法,從LoadRunner發出的請求的響應中獲取到文件的內容,然后通過LoadRunner的文件操作方法,自行生成文件。
從LoadRunner錄制時的記錄(Recording Log)中,我們可以看到具體的請求和請求的響應信息:
從這里可以看到,我們只需要對以下語句進行關聯,就能獲得文件的內容。
web_url("viewfile.asp",
"URL=http://www.anti-gravitydesign.com/bbs/viewFile.asp?BoardID=25&ID=217",
"Resource=0",
"RecContentType=text/html",
"Referer=http://www.anti-gravitydesign.com/bbs/dispbbs.asp?boardID=25&ID=5187&page=1",
"Snapshot=t16.inf",
"Mode=HTML",
EXTRARES,
"Url=viewFile.asp?BoardID=25&ID=217", "Referer=http://www.anti-gravitydesign.com/bbs/dispbbs.asp?boardID=25&ID=5187&page=1", ENDITEM,
LAST);
獲得文件內容后,通過LoadRunner的fopen,fwrite,fclose函數,就可以將這部分內容保存成本地文件了。
//獲取響應中的文件長度
flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
if(flen > 0)
{
//以寫方式打開文件
if((filedes = fopen("c:\\test.rar", "wb")) == NULL)
{
lr_output_message("Open File Failed!");
return -1;
}
//寫入文件內容
fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);
//關閉文件
fclose(filedes);
}
點擊下載完整的腳本文件。
注意,使用該腳本文件時,請自行修改參數username和passwd的值。
當然,本腳本只是簡單實現了文件下載并保存本地的功能,如果我們希望每次下載保存到本地的文件采用不同的名稱,或是希望根據實際文件的后綴名動態生成后綴名,則還需要額外的工作。讀者可以自行思考如何實現。^_^
原文轉自:http://www.anti-gravitydesign.com