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文件存在于测试框架中。
错误原因分析
- 手动设置Content-Type头破坏请求结构:Karate会自动为multipart请求生成包含边界(boundary)参数的
multipart/form-data头,手动设置该头会覆盖正确参数,导致服务器无法解析请求体。 - multipart字段名不匹配:错误信息显示服务器期望的字段名是
info(文本字段)和file(文件字段),但脚本中使用的是text和jpg,字段名不匹配导致服务器无法识别请求内容。 - 图片MIME类型错误:标准JPEG图片的MIME类型是
image/jpeg,而非脚本中的image/jpg,部分服务器会严格校验MIME类型。
解决方法
- 移除手动设置的Content-Type头:删除
And header Content-Type = 'multipart/form-data',依赖Karate自动生成正确的请求头。 - 修正multipart字段名:按照API文档要求,将文本字段名改为
info,文件字段名改为file。 - 修正图片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
相关产品推荐
相关产品推荐

