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