ROBOT框架存储JSON数据发API请求报415错误如何解决
Robot Framework API请求返回415错误解决方案
错误原因
触发415 Unsupported Media Type错误的核心原因是:post on session关键字的data参数接收字典时,会自动将其序列化为application/x-www-form-urlencoded格式的表单数据,即便你手动指定了Content-Type: application/json请求头,实际请求体的格式依然不符合后端接收JSON的要求,所以被后端拒绝。
解决方案
方案1(优先推荐,适配新版RequestsLibrary)
新版RequestsLibrary的post on session关键字支持json参数,直接传字典即可自动序列化为JSON格式,同时自动添加正确的Content-Type请求头,无需手动定义header。
修改后完整代码如下:
*** Settings *** Library Collections Library RequestsLibrary *** Variables *** ${prod_url} http://localhost:3000/api *** Test Cases *** User login and token generation Create Session demo ${prod_url} ${body}= Create Dictionary username=test@test.com password=123456789 # 直接使用json参数传字典,库会自动处理序列化和请求头 ${login}= Post On Session demo /login json=${body} # 调试信息打印 Log To Console 响应状态码:${login.status_code} Log To Console 响应内容:${login.content} # 提取token,根据实际返回的JSON字段调整键名即可 ${resp_json}= Set Variable ${login.json()} ${token}= Set Variable ${resp_json}[access_token] Log To Console 登录获取的Token:${token}
方案2(适配旧版RequestsLibrary)
如果使用的RequestsLibrary版本不支持json参数,可以先将字典转为JSON字符串再通过data参数传递:
*** Settings *** Library Collections Library RequestsLibrary Library JSONLibrary *** Variables *** ${prod_url} http://localhost:3000/api *** Test Cases *** User login and token generation Create Session demo ${prod_url} ${body}= Create Dictionary username=test@test.com password=123456789 # 字典转JSON字符串 ${body_json}= Dump Json ${body} ${header}= Create Dictionary Content-Type=application/json ${login}= Post On Session demo /login data=${body_json} headers=${header} # 后续token提取逻辑和方案1一致
注意事项
- 原代码变量区的
Credentials是无效定义,直接删除即可,否则会触发变量解析错误 ${prod_url}建议加上http/https协议头,避免部分版本的RequestsLibrary识别出错
内容的提问来源于stack exchange,提问作者Sumit Patra
相关产品推荐
相关产品推荐

