Karate无文件POST多部分表单请求失效,求正确配置方法
解决Karate发送multipart/form-data请求的问题
问题场景
编写Karate Feature发送不含文件的POST multipart form请求时无法正常工作,怀疑字段为空。现有代码片段:
Given url apiurl And multipart field RI = xmlRIString And multipart field CI = xmlCIString And multipart field BI = xmlBaseString
其中xmlRIString、xmlCIString、xmlBaseString均为XML字符串。
服务器可正常接收的Postman请求日志(脱敏):
POST /submit HTTP/1.1 User-Agent: PostmanRuntime/7.22.0 Accept: */* Cache-Control: no-cache Postman-Token: ceac2d58-dd33-426b-bde5-26a0846d6385 Host: localhost:8001 Content-Type: multipart/form-data; boundary=--------------------------725566702214297796531881 Accept-Encoding: gzip, deflate, br Cookie: some-cookie-value-here Content-Length: 47864 Connection: keep-alive ----------------------------postman Content-Disposition: form-data; name="RI" <REQUEST_GROUP>some xml here</REQUEST_GROUP> ----------------------------postman Content-Disposition: form-data; name="CI" <REQUEST>some xml here</REQUEST> ----------------------------postman Content-Disposition: form-data; name="BI" <ABOUT_VERSIONS>some xml here</ABOUT_VERSIONS> ----------------------------postman--
可正常运行的curl命令:
curl --location --request POST 'http://localhost:8001/upload' \ --header 'Content-Type: multipart/form-data; boundary=--------------------------725566702214297796531881' \ --form 'RI=<REQUEST_GROUP>some xml here</REQUEST_GROUP>' \ --form 'CI=<REQUEST>some xml here</REQUEST>' \ --form 'BI=<ABOUT_VERSIONS>some xml here</ABOUT_VERSION>'
正确的Karate Feature实现
方式1:基础字符串字段提交
确保变量xmlRIString、xmlCIString、xmlBaseString已正确赋值且不为空,直接使用multipart field即可,Karate会自动处理multipart边界:
Given url 'http://localhost:8001/upload' And multipart field RI = xmlRIString And multipart field CI = xmlCIString And multipart field BI = xmlBaseString When method post Then status 200
方式2:指定字段的Content-Type(可选)
如果服务器要求XML字段的Content-Type为text/xml,可以为每个multipart字段添加header:
Given url 'http://localhost:8001/upload' And multipart field RI = xmlRIString And multipart header RI Content-Type = 'text/xml' And multipart field CI = xmlCIString And multipart header CI Content-Type = 'text/xml' And multipart field BI = xmlBaseString And multipart header BI Content-Type = 'text/xml' When method post Then status 200
关键验证步骤
- 确认变量值:在代码中添加日志输出,验证XML变量是否正确加载:
* print "RI XML content:", xmlRIString - 开启请求日志:在Karate配置中添加
logPrettyRequest=true,可以查看实际发送的请求内容,确认multipart字段是否正确填充:Background: * configure logPrettyRequest = true
内容的提问来源于stack exchange,提问作者Evgeny Fedorenko
相关产品推荐
相关产品推荐

