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
相关产品推荐
相关产品推荐

