qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          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

          <2014年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 灌云县| 秭归县| 任丘市| 长垣县| 柏乡县| 周口市| 锦屏县| 浦城县| 荔波县| 鹤庆县| 东城区| 修水县| 安庆市| 吉木萨尔县| 铁岭县| 奉贤区| 扬中市| 天长市| 嫩江县| 额尔古纳市| 泸西县| 高要市| 安陆市| 长白| 独山县| 江都市| 玛沁县| 绍兴县| 重庆市| 武平县| 昌都县| 桐庐县| 长沙市| 静宁县| 辽源市| 肇源县| 蚌埠市| 鹤峰县| 长沙市| 双牌县| 阳新县|