上周群里有位同學,問我用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代碼如下:
import java.io.*; //這個是獲取到請求返回的數據,prev是獲取上個請求的返回 byte[]result=prev.getResponseData(); //代表存放文件的位置和文件名 String file_name="C:\\Users\\admin\\Desktop\\BaiDu.jpg"; File file=new File(file_name); FileOutputStream out=new FileOutputStream(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實現上傳下載操作啦,感興趣的同學可以自己動動手練習下