方法一:通過勾選『對POST使用multipart/form-data;』
注意坑
手動設置Content-Type后,該方法失效。需要在預處理程序中,移除:Content-Type,移除代碼如下:
添加JSR223 預處理程序(Java):
// 在低版本Jmeter可能不成功,在5.3版本中,該腳本測試通過
sampler.getHeaderManager().removeHeaderNamed("Content-Type");
但移除后,后續的接口如果仍然想要設置默認Content-Type,則需要添加JSR223 后置處理程序(Java):
import org.apache.jmeter.protocol.http.control.Header;
// 創建Header,需要導入
Header header = new Header("Content-Type","application/json; charset=UTF-8");
// 添加Header
sampler.getHeaderManager().add(header);
除此之外,上傳文件的名字為中文時,會亂碼,解決方案參考:https://blog.csdn.net/qq_18298049/article/details/106817246
傳參:
普通參數:
Content-Disposition: form-data; name="productId"
# 以上類型的參數,在Jmeter中通過『參數tab』添加
文件:
Content-Disposition: form-data; name="file"; filename="測試條款.pdf"
Content-Type: application/pdf
# 以上類型的參數,在Jmeter中通過『文件上傳』添加,其中:
# - name:對應Jmeter的參數名稱
# - filename:對應Jmeter的文件名稱(全路徑)
# - Content-Type:對應Jmeter的MIME類型
方法二:直接構建參數(留下疑問:通過__FileToString為什么會導致文件失效)
創建Post請求后,該方法只適合上傳文本,不適合圖片、PDF等上傳,因為__FileToString方法會導致該類文件失效,上傳后文件不可用。
除此之外,還需注意:參數,編碼格式,請求頭,boundary
請求參數
注意設置上傳文件的name,filename,Content-Type及調用__FileToString生成文件內容
--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
Content-Disposition: form-data; name="productId"
581
--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
Content-Disposition: form-data; name="file"; filename="測試條款.pdf"
Content-Type: application/pdf
${__FileToString(C:\Users\DELL\Desktop\v3.7.3迭代\testProduct.pdf,utf-8,)}
--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39--
編碼格式
在調用__FileToString函數時,注意使用『正確(如utf-8)』格式,否則亂碼
請求頭
使用該方法實現文件上傳時,注意覆蓋接口的請求頭Content-Type,設置為:
# 通過HTTP信息頭管理器設置,boundary可自定義
Content-Type: multipart/form-data; boundary=edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
boundary
注意boundary的值,需要與請求參數中的boundary相同