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

Robotframework发送带JSON体的POST请求至演示REST站点返回400错误

解决Robot Framework RequestsLibrary POST请求JSON体返回400的问题

嘿,我来帮你搞定这个问题!你的代码里的问题出在To Json关键字的使用上,咱们一步步拆解:

问题根源

你用了To Json来处理{"name":"jjxx","job":"devxx"},但这里有个关键误区:

  • To Json关键字的作用是把JSON格式的字符串转换成Python对象(字典/列表),但你直接传入的{"name":"jjxx","job":"devxx"}在Robot Framework里已经被解析成一个字典了,不是JSON字符串。这就导致To Json处理时出现异常,最终生成的请求体格式不正确,服务器返回400错误。
  • 另外,Post Request的json参数可以直接接受Python字典,RequestsLibrary会自动帮你把它序列化为JSON格式的请求体,根本不需要额外转换。

修正后的测试代码

直接去掉多余的To Json步骤,用字典作为json参数的值就行:

*** Settings ***
Library    RequestsLibrary

*** Variables ***
${RestApiB} =    https://reqres.in

*** Test Cases ***
Create a new user
    Create Session    restSession    ${RestApiB}
    # 直接构造字典作为请求体
    ${payload} =    Create Dictionary    name=jjxx    job=devxx
    ${headers} =    Create Dictionary    Content-Type=application/json
    ${response} =    Post Request    restSession    /api/users    json=${payload}    headers=${headers}
    Should Be Equal As Strings    ${response.status_code}    201

另一种可选方式:用JSON字符串(不推荐,但可参考)

如果你非要用JSON字符串,需要把字符串用引号括起来,并且不需要To Json,直接传给data参数(记得保留正确的Content-Type):

*** Test Cases ***
Create a new user with JSON string
    Create Session    restSession    ${RestApiB}
    ${json_payload} =    Set Variable    '{"name":"jjxx","job":"devxx"}'
    ${headers} =    Create Dictionary    Content-Type=application/json
    ${response} =    Post Request    restSession    /api/users    data=${json_payload}    headers=${headers}
    Should Be Equal As Strings    ${response.status_code}    201

不过还是推荐第一种用字典的方式,更符合Robot Framework的写法,也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:37:43