1. 程式人生 > >Jmeter之模擬檔案上傳、下載介面操作--轉載

Jmeter之模擬檔案上傳、下載介面操作--轉載

 

一、準備工作:

  • 上傳介面一個(自行開發解決了)
  • 下載介面
  • ps:沒有困難創造困難也要上
  • jmeter4.0版本

上傳介面原始碼

複製程式碼
/**
     * 檔案上傳
     */
    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
    @ApiOperation(value = "上傳檔案", httpMethod = "POST")
    @ResponseBody
    public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file) {
        if (Objects.isNull(file)) {
            return getMessage("90110", "上傳檔案不能為空!");
        }
        String fileName = file.getOriginalFilename();
        String path = "F:/upload";
        File dest = new File(path + "/" + fileName);
        if (!dest.getParentFile().exists()) { //判斷檔案父目錄是否存在
            dest.getParentFile().mkdir();
        }
        try {
            //儲存檔案
            file.transferTo(dest);
            return getMessage("90000", "上傳檔案成功!");
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            return getMessage("90555", "上傳檔案失敗!");
        } catch (IOException e) {
            return getMessage("90555", "上傳檔案失敗!");
        }
    }
複製程式碼

二、jmeter做上傳的指令碼

2.1、編寫指令碼流程


首先新增一個執行緒組,然後線上程組裡面新增一個http請求,因為是傳送資料,所有是post請求,寫好上傳的地址,然後寫好檔案路徑
1、新增執行緒組:右鍵測試計劃,新增-Threads(Users)-執行緒組;
2、新增一個http請求:右鍵執行緒組,新增-Sampler-HTTP請求;
3、寫好http請求中的url和路徑,以及要上傳的檔案
4、新增一個檢視結果樹,檢視介面呼叫結果。右鍵執行緒組,新增-監聽器-檢視結果樹;

2.2、指令碼例項


協議:http
伺服器名稱:127.0.0.1
埠號:8888
請求型別:post
路徑:/fileUpload
body:要選files_upload這個tab頁,寫檔案路徑,和引數名


下面是指令碼截圖:

 

2.3、執行指令碼,檢視結果

看下面的圖,執行結果,介面返回成功,再去我本地F盤(接口裡寫死的)下是否有檔案,看一下,到底有沒有成功。

 

 看下面的圖,對應目錄下已經有咱們剛才上傳的檔案了,及時間也對得上

 ------------------------------------------------------------------------------------------------------------分割線---------------------------------------------------------------------------------------------------------------------------

可能遇到的坑:

ps:此處為程式碼開發部分,感興趣的同學可以瞭解下及解決方案參考

問題一:關於報錯:

Request”,”exception”:”org.springframework.web.multipart.support.MissingServletRequestPartException”,”message”:”Required request part ‘file’ is not present”,”path”:”/excel/import/upload”}
--------------------- 
我錯誤的原因和解決方法:

主要是由於前臺傳遞mutipartFile,表單的名字是file,但是再feign呼叫的時候我使用的是requestPart(“file”). 因此無法傳遞。 
修改前端表單的檔名為file

問題二:

400 bad request: Required request part ‘file’ is not present

猜測通過@RequestParam(value = “file”, required = false)這種方式來取參的話,file欄位就是可選的了。

這個錯誤大概是說沒有file這個欄位,而這個欄位又是必須的,即使用了註釋,如下面

@RequestParam("file") MultipartFile file

那麼就需要我們去檢查下前端頁面是否存在這個欄位了

問題三:

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

不手動新增content-type後就行了:此時訪問成功,去掉訊息頭多餘的新增

 ------------------------------------------------------------------------------------------------------------分割線---------------------------------------------------------------------------------------------------------------------------

三、jmeter下載檔案。

3.1準備工作:


圖片的url是:http://a.hiphotos.baidu.com/image/pic/item/4b90f603738da977b1e8c6c7ba51f8198718e313.jpg


3.2編寫指令碼流程


首先新增一個執行緒組,然後線上程組裡面新增一個http請求,因為是獲取資料,所有是get請求,寫好下載的地址


1、新增執行緒組:右鍵測試計劃,新增-Threads(Users)-執行緒組;
2、新增一個http請求:右鍵執行緒組,新增-Sampler-HTTP請求;
3、寫好http請求中的url和路徑;
4、新增beanshell,獲取到返回的檔案內容,儲存到一個檔案裡面。右鍵執行緒組,新增-Sampler-BeanShellSampler,beanshell程式碼如下:

複製程式碼
importjava.io.*;
byte[]result=prev.getResponseData();//這個是獲取到請求返回的資料,prev是獲取上個請求的返回
Stringfile_name="C:\\Users\\bjniuhanyang\\Desktop\\BaiDu.jpg";//代表存放檔案的位置和檔名
Filefile=newFile(file_name);
FileOutputStreamout=newFileOutputStream(file);
out.write(result);
out.close();
複製程式碼

5、新增一個檢視結果樹,檢視介面呼叫結果。右鍵執行緒組,新增-監聽器-檢視結果樹;

3.3 指令碼例項


協議:http
伺服器名稱:a.hiphotos.baidu.com
埠號:80 (提示,埠號預設是就是80,可以不用寫哦)
請求型別:get
路徑:/image/pic/item/4b90f603738da977b1e8c6c7ba51f8198718e313.jpg
指令碼截圖如下

 

下面這個是beanshell裡面的內容,也就是咱們儲存檔案的操作。

 

3.4 執行指令碼,檢視結果

 看下面的圖,執行結果,已經可以看到剛才這張圖片了,而且請求都是成功的。

 

  咱們再去桌面上看,檔案已經存在F盤根目錄下了

 

 

 以上就是利用jmeter實現上傳下載操作啦,感興趣的同學可以自己動動手練習下

優秀不夠,你是否無可替代

軟體測試交流QQ群:631646987,期待你的加入!!

歡迎關注我的微信公眾號:軟體測試君


自動化測試技術交流   分類:  Jmeter   好文要頂  關注我  收藏該文    Refain
關注 - 17
粉絲 - 64     +加關注  

一、準備工作:

  • 上傳介面一個(自行開發解決了)
  • 下載介面
  • ps:沒有困難創造困難也要上
  • jmeter4.0版本

上傳介面原始碼

複製程式碼
/**
     * 檔案上傳
     */
    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
    @ApiOperation(value = "上傳檔案", httpMethod = "POST")
    @ResponseBody
    public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file) {
        if (Objects.isNull(file)) {
            return getMessage("90110", "上傳檔案不能為空!");
        }
        String fileName = file.getOriginalFilename();
        String path = "F:/upload";
        File dest = new File(path + "/" + fileName);
        if (!dest.getParentFile().exists()) { //判斷檔案父目錄是否存在
            dest.getParentFile().mkdir();
        }
        try {
            //儲存檔案
            file.transferTo(dest);
            return getMessage("90000", "上傳檔案成功!");
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            return getMessage("90555", "上傳檔案失敗!");
        } catch (IOException e) {
            return getMessage("90555", "上傳檔案失敗!");
        }
    }
複製程式碼

二、jmeter做上傳的指令碼

2.1、編寫指令碼流程


首先新增一個執行緒組,然後線上程組裡面新增一個http請求,因為是傳送資料,所有是post請求,寫好上傳的地址,然後寫好檔案路徑
1、新增執行緒組:右鍵測試計劃,新增-Threads(Users)-執行緒組;
2、新增一個http請求:右鍵執行緒組,新增-Sampler-HTTP請求;
3、寫好http請求中的url和路徑,以及要上傳的檔案
4、新增一個檢視結果樹,檢視介面呼叫結果。右鍵執行緒組,新增-監聽器-檢視結果樹;

2.2、指令碼例項


協議:http
伺服器名稱:127.0.0.1
埠號:8888
請求型別:post
路徑:/fileUpload
body:要選files_upload這個tab頁,寫檔案路徑,和引數名


下面是指令碼截圖:

 

2.3、執行指令碼,檢視結果

看下面的圖,執行結果,介面返回成功,再去我本地F盤(接口裡寫死的)下是否有檔案,看一下,到底有沒有成功。

 

 看下面的圖,對應目錄下已經有咱們剛才上傳的檔案了,及時間也對得上

 ------------------------------------------------------------------------------------------------------------分割線---------------------------------------------------------------------------------------------------------------------------

可能遇到的坑:

ps:此處為程式碼開發部分,感興趣的同學可以瞭解下及解決方案參考

問題一:關於報錯:

Request”,”exception”:”org.springframework.web.multipart.support.MissingServletRequestPartException”,”message”:”Required request part ‘file’ is not present”,”path”:”/excel/import/upload”}
--------------------- 
我錯誤的原因和解決方法:

主要是由於前臺傳遞mutipartFile,表單的名字是file,但是再feign呼叫的時候我使用的是requestPart(“file”). 因此無法傳遞。 
修改前端表單的檔名為file

問題二:

400 bad request: Required request part ‘file’ is not present

猜測通過@RequestParam(value = “file”, required = false)這種方式來取參的話,file欄位就是可選的了。

這個錯誤大概是說沒有file這個欄位,而這個欄位又是必須的,即使用了註釋,如下面

@RequestParam("file") MultipartFile file

那麼就需要我們去檢查下前端頁面是否存在這個欄位了

問題三:

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

不手動新增content-type後就行了:此時訪問成功,去掉訊息頭多餘的新增

 ------------------------------------------------------------------------------------------------------------分割線---------------------------------------------------------------------------------------------------------------------------

三、jmeter下載檔案。

3.1準備工作:


圖片的url是:http://a.hiphotos.baidu.com/image/pic/item/4b90f603738da977b1e8c6c7ba51f8198718e313.jpg


3.2編寫指令碼流程


首先新增一個執行緒組,然後線上程組裡面新增一個http請求,因為是獲取資料,所有是get請求,寫好下載的地址


1、新增執行緒組:右鍵測試計劃,新增-Threads(Users)-執行緒組;
2、新增一個http請求:右鍵執行緒組,新增-Sampler-HTTP請求;
3、寫好http請求中的url和路徑;
4、新增beanshell,獲取到返回的檔案內容,儲存到一個檔案裡面。右鍵執行緒組,新增-Sampler-BeanShellSampler,beanshell程式碼如下:

複製程式碼
importjava.io.*;
byte[]result=prev.getResponseData();//這個是獲取到請求返回的資料,prev是獲取上個請求的返回
Stringfile_name="C:\\Users\\bjniuhanyang\\Desktop\\BaiDu.jpg";//代表存放檔案的位置和檔名
Filefile=newFile(file_name);
FileOutputStreamout=newFileOutputStream(file);
out.write(result);
out.close();
複製程式碼

5、新增一個檢視結果樹,檢視介面呼叫結果。右鍵執行緒組,新增-監聽器-檢視結果樹;

3.3 指令碼例項


協議:http
伺服器名稱:a.hiphotos.baidu.com
埠號:80 (提示,埠號預設是就是80,可以不用寫哦)
請求型別:get
路徑:/image/pic/item/4b90f603738da977b1e8c6c7ba51f8198718e313.jpg
指令碼截圖如下

 

下面這個是beanshell裡面的內容,也就是咱們儲存檔案的操作。

 

3.4 執行指令碼,檢視結果

 看下面的圖,執行結果,已經可以看到剛才這張圖片了,而且請求都是成功的。

 

  咱們再去桌面上看,檔案已經存在F盤根目錄下了

 

 

 以上就是利用jmeter實現上傳下載操作啦,感興趣的同學可以自己動動手練習下