You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate框架多文件上传接口自动化返回415错误求助

Multipart Upload API测试返回415错误排查(Karate脚本)

问题场景

使用Karate对支持分块上传的API做自动化测试时,请求返回415错误。测试脚本如下:

Scenario: 
  * def Json = {}
  * def multiPartText = read(Test.txt)
  * def multiPartPng = read(Test.png)
  * def multiPartJpg = read(Test.jpg)

When path 'Path'
And multipart field text = multiPartText
And multipart file jpg = { read: 'path/Test.jpg', filename: 'Test.jpg', content-Type: 'image/jpg'}
And header Content-Type = 'multipart/form-data'
And method POST
Then 201

执行后错误信息:

Error:
  content-disposition: form data; name= "info"; filename=""
  content-type: text/plain
  content length: 500
  Completed: true
  IsinMemory: true


  Mixed content-disposition: from-data; name="file"; filename="Test.jpg"
  content-type: image/jpg
  content length: 500
  Completed: true
  IsinMemory: false >> Note: Path is correct and jpg in the framework.

注:文件路径正确,jpg文件存在于测试框架中。

错误原因分析

  1. 手动设置Content-Type头破坏请求结构:Karate会自动为multipart请求生成包含边界(boundary)参数的multipart/form-data头,手动设置该头会覆盖正确参数,导致服务器无法解析请求体。
  2. multipart字段名不匹配:错误信息显示服务器期望的字段名是info(文本字段)和file(文件字段),但脚本中使用的是text和jpg,字段名不匹配导致服务器无法识别请求内容。
  3. 图片MIME类型错误:标准JPEG图片的MIME类型是image/jpeg,而非脚本中的image/jpg,部分服务器会严格校验MIME类型。

解决方法

  1. 移除手动设置的Content-Type头:删除And header Content-Type = 'multipart/form-data',依赖Karate自动生成正确的请求头。
  2. 修正multipart字段名:按照API文档要求,将文本字段名改为info,文件字段名改为file。
  3. 修正图片Content-Type:将image/jpg替换为标准的image/jpeg。

修改后的测试脚本

Scenario: 测试Multipart上传API
  * def multiPartText = read(Test.txt)

When path 'Path'
And multipart field info = multiPartText
And multipart file file = { read: 'path/Test.jpg', filename: 'Test.jpg', content-Type: 'image/jpeg'}
And method POST
Then status 201

内容的提问来源于stack exchange,提问作者Berkay oncel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:20:41