求助:JMeter 5.4如何发送携带PDF附件的SOAP信封(2022年有效方案)
JMeter 5.4 发送带PDF附件的SOAP信封(MTOM格式)可行方案
核心方案:用HTTP请求采样器构造MTOM请求
MTOM是SOAP传输二进制附件的标准方式,JMeter 5.4完全支持,以下是具体步骤:
1. 配置HTTP请求与请求头
- 新建
HTTP请求采样器,设置请求方法为POST,填写目标接口URL - 添加
请求头管理器,配置以下关键头:Content-Type:multipart/related; boundary="A100x"; type="application/xop+xml"; start="<soap-part>"; start-info="text/xml"SOAPAction: 填写接口要求的SOAP Action值(若接口需要)
2. 编写MTOM格式请求体
在HTTP请求的Body Data中填入以下模板,替换占位符为实际内容:
--A100x Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" Content-Transfer-Encoding: 8bit Content-ID: <soap-part> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" [你的命名空间]> <!-- 填写完整的SOAP信封内容 --> <inc:Include href="cid:PDF_TO_UPLOAD" xmlns:inc="http://www.w3.org/2004/08/xop/include"/> </soapenv:Envelope> --A100x Content-Type: application/pdf Content-ID: <PDF_TO_UPLOAD> Content-Transfer-Encoding: binary Content-Disposition: attachment; filename="MyDoc.pdf" ${PDF_BINARY_CONTENT} --A100x--
3. 加载PDF二进制内容到变量
给HTTP请求添加JSR223 PreProcessor(选择Groovy语言),执行以下代码读取PDF:
def pdfPath = "/绝对路径/到/你的/MyDoc.pdf" def pdfBytes = new File(pdfPath).bytes vars.put("PDF_BINARY_CONTENT", new String(pdfBytes, "ISO-8859-1"))
- 替换
pdfPath为实际文件路径 - 用
ISO-8859-1编码是为了完整保留二进制字节,避免内容损坏
4. 修正你之前的错误点
- PDF部分的
Content-Type必须是application/pdf,而非text/plain - 附件传输编码设为
binary,不要用7bit - SOAP部分的
Content-ID要和请求头的start参数对应(如示例中的<soap-part>) - 放弃Custom SOAP Sampler插件,HTTP请求采样器更灵活可控
验证方式
- 添加
查看结果树监听器,检查响应是否正常 - 抓包对比合法客户端(如SOAP UI)的请求结构,确保JMeter请求格式一致
内容的提问来源于stack exchange,提问作者Gribbet4Eva
相关产品推荐
相关产品推荐

