LoadRunner下載文件腳本
在看普澤關于pezybase的測試報告的時候,發現里面有用到jmeter(http協議)并發測試下載文件,考慮到后面可能需要在公司pezybase的并發下載,把之前使用過的loadrunner下載文件腳本重新運行和整理一下。
一、http協議
loadrunner使用http協議是無法錄制到下載過程的,只會往服務器發送一個下載請求,其實服務器已經把數據返回給客戶端了,但是loadrunner是錄制不到保存文件到本地這個過程,所以就是需要我們手動把收到的內容保存打本地即可。(http協議上傳文件的完整過程是可以直接錄制的,在UC中已經使用過)。
注意:下面腳本中用到的LR函數如下,還使用了一些C語言基本的文件操作方法。在腳本中還可以加入一些判斷來進行事務是否成功以及文件大小是否正確等的判斷;
web_reg_save_param:關聯函數,放在http請求前面,保存請求返回的內容;
web_url:http請求函數,向指定的url發送請求,下載文件也就是直接往下載鏈接發送請求;
web_get_int_property:獲取下載請求返回的文件長度;
web_set_max_html_param_len:設置web_set_max_html_param_len方法中參數的最大長度,要求大于需要下載文件的大小;
Action() { int flen;//定義一個整型變量保存獲得文件的大小 long fileContent;//保存文件句柄,也就是文件的內容 char fileName[]="";//保存文件路徑及文件名 char * strNumber; strNumber=lr_eval_string("test{NewParam}");//獲取一個隨機數并轉化成字符串 ,NewParam設置參數為隨機類型,這里根據自己需要進行參數化設置 strcat(fileName,"C:/test/");//將路徑保存到file變量中 strcat(fileName,strNumber); //拼接文件名 strcat(fileName,".pdf");//拼接后綴名,根據需要設置,最后就完成了完整的路徑和文件名 web_set_max_html_param_len("20000");//設置參數的最大長度,注意該值必須大于文件的大小 //使用關聯函數獲取下載文件的內容,在這里不定義左右邊界,獲得服務器響應的所有內容 web_reg_save_param("fcontent", //返回的內容全部存儲在fcontent這個參數中 "LB=", "RB=", "SEARCH=BODY", LAST); lr_start_transaction("下載文件"); #設置的事務開始點 #web_url方法你可以直接編寫,也可以在啟動錄制的時候,輸入下載鏈接URL進行簡單錄制,主要注意URL和Resource這兩個參數即可; web_url("file.php", #函數名,沒有實際作用 "URL=http://forum.ubuntu.org.cn/download/file.php?id=129973&sid=78fc8d76767ef49b606595824ceb963d", #下載鏈接,也就是該鏈接輸入到瀏覽器會提示下載,獲取方法很多; "Resource=1", #1表示是下載資源,0表示是頁面資源 "RecContentType=application/octetstream", "Referer=", "Snapshot=t1.inf", LAST); flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);//獲取響應中的文件長度 if(flen > 0) { //以寫方式打開文件 fileContent = fopen(fileName, "wb"); if(fileContent == NULL) #看是否正確打開了需要保存下載內容的文件,fileName是上面準備組織的文件路徑; { lr_output_message("打開文件失敗!"); return -1; } fwrite(lr_eval_string("{fcontent}"), flen, 1, fileContent);//寫入文件內容 fclose(fileContent);//關閉文件 } lr_end_transaction("下載文件",LR_AUTO);#事務結束點 return 0; } |
二、java user協議
使用java user協議更簡單,就是直接使用java編寫一段從指定鏈接下載文件的腳本即可;
import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import lrapi.lr; public class Actions { public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { int DownLoadSize = 0; String path = "c:\\temp\\"; //設置下載文件保存路徑 String vuid = String.valueOf(lr.get_vuser_id()); //獲取當前虛擬用戶ID并轉換成字符串 DownLoadSize = UrlTools.getHttpFileByUrl("http://forum.ubuntu.org.cn/download/file.php?id=129973&sid=78fc8d76767ef49b606595824ceb963d",vuid,path); //調用UrlTools.getHttpFileByUrl() return 0; }//end of action public int end() throws Throwable { return 0; }//end of end } class UrlTools { public static int getHttpFileByUrl(String address,String userid,String path) { //定義下面需要用到的變量 URL url; URLConnection conn = null; int BUFF_SIZE = 1024; byte[] buf = new byte[BUFF_SIZE]; int DownLoadSize = 0; BufferedInputStream bis; FileOutputStream fos = null; int size = 0; try { url = new URL(address); //address為傳遞進來需要下載的鏈接 conn = url.openConnection();//使用url實例化需要下載的鏈接 bis = new BufferedInputStream(conn.getInputStream()); //把需要下載的文件內容保存在bis這個輸入流中 fos = new FileOutputStream(path+"\"+userid+"test000001"+“.pdf”));//組成完整路徑,并實例化到輸出流,這里可以進行參數化,如參數化文件名, // 路徑需要事先手動創建好,當然你也可以在腳本中創建實現不同的路徑 System.out.println("需要下載的文件大小為:" + conn.getContentLength()/1024 + "k"); while((size = bis.read(buf)) != -1) #按照設置的buf大小寫文件并記錄下載的大小 { fos.write(buf,0,size); DownLoadSize = DownLoadSize+size; } bis.close(); fos.close(); System.out.println("用戶" + userid + "下載" + url +"完成!"); }catch(MalformedURLException e) { System.out.println("下載發生異常:"); e.printStackTrace(); }catch(IOException e) { System.out.println("下載發生異常:"); e.printStackTrace(); } return DownLoadSize/1024; } } |
posted on 2014-04-17 10:38 順其自然EVO 閱讀(1842) 評論(0) 編輯 收藏 所屬分類: loadrunner