我正在测试一个REST服务器;它的一个服务提供一个文件作为响应。我使用robotframework-requests
库来调用服务。这是我的测试用例:
*** Settings ***
Library RequestsLibrary
*** Test Cases ***
Test
RequestsLibrary.CREATE SESSION session http://192.168.100.139:9090
${data} = evaluate json.load(open('/root/data.json', 'r')) json
log to console Data: ${data}
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data}
log to console Resp: ${resp}
我得到的回报是:
^{pr2}$其中,415
HTTP代码表示Unsupported Media Type
。在
我怎样才能得到所提供的文件作为回报,我应该如何配置下载路径?在robotframework
或{
编辑1:
我尝试过按@Todor的建议为请求头设置Content-Type
:
${headers} = Create Dictionary Content-Type=${contentType}
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data} headers=${headers}
我仍然得到application/octet-stream
和application/zip
(文件的扩展名为.zip
)的状态代码415
。在
<2>编辑:
为了将文件保存到一个目录中,我更改了服务器,这样我就可以使用它;但是由于它不接受我的头,所以我仍然不能完全调用该服务。我得到415
状态代码,它是从服务器发送的,这意味着我没有在我的header
中设置正确的Content-type
。在
顺便说一句,我把我的请求主体改成@Todor推荐的:
${data} = evaluate json.dumps(json.load(open('/root/data.json', 'r'))) json
${headers} = Create Dictionary Content-type=${contentType}
${headers} = evaluate json.dumps(${headers})
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data} headers=${headers}
但我对application/octet streamand
application/zip(the file has
.zipextension) as
${contentType}`;仍然得到相同的错误。在
**编辑3:**
我一直在用错误的Content-type
;我应该用application/json
。考虑到@Todor关于header
和data
的注释,我终于让它起作用了。在
${data} = evaluate json.dumps(json.load(open('/root/data.json', 'r'))) json
${headers} = Create Dictionary Content-type=application/json
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data} headers=${headers}
使用此错误响应,您可能错过了一个必需的标题,如
content-type
;请检查应用程序的日志以确定。添加方法如下:
代码还有另一个问题;这一行:
^{pr2}$,将有效地加载所提供的json文件,并将其转换为python对象(很可能是字典)。
但是,您不应该像这样在请求中发送它-它必须被序列化回json格式(b/njson和python字典的字符串表示的最大区别是json不使用单引号
'
作为分隔符)。在一旦你做到了,你可以:
,这将使它变回原样。或者,只需加载文件内容,而不进行这种前后转换。在
相关问题 更多 >
编程相关推荐