Jmeter:上傳文件失效問題


方法一:通過勾選『對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相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM