我正在测试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}
这是我得到的回报:
Data: {u'files': [{u'tags': [{u'name': u'l1', u'value': u'l2', u'level': 2}], u'counters': {u'count': 10, u'valueMin': 0, u'prefix': u'a1', u'specifics': [{u'valueMin': 0, u'valueMax': 10, u'name': u'a2', u'tags': {u'additionalProp3': u'a5', u'additionalProp2': u'a4', u'additionalProp1': u'a3'}}], u'valueMax': 10}}], u'to': u'2018-02-14T11:25:10.712Z', u'from': u'2018-02-14T11:05:10.712Z', u'intervalMillis': 300000}
Resp: <Response [415]>
415
HTTP代码的含义为Unsupported Media Type
。
如何获得提供的文件以及如何配置下载路径?在robotframework
或python
进行编码是否可行?
编辑1:
我已尝试将Content-Type
设置为@Todor建议的请求标头:
${headers} = Create Dictionary Content-Type=${contentType}
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data} headers=${headers}
我仍然会将415
和application/octet-stream
(文件的扩展名为application/zip
)的状态代码.zip
设为${contentType}
。
编辑2:
我更改了服务器以便将文件保存到目录中,所以我可以使用它;但由于它不接受我的标题,我仍然无法完全调用该服务。我收到了415
状态代码,该代码是从服务器发送的,暗示我没有在Content-type
中设置正确header
。
${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-stream and
application / zip (the file has
。zip extension) 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}
答案 0 :(得分:1)
有了这个错误回复,您可能错过了必需的标题,例如content-type
;检查您应用的日志以确定
以下是如何添加它:
# the previous code
${headers}= Create Dictionary Content-type=application/json
${resp} = RequestsLibrary.POST REQUEST session uri=/omc/simulator/api/generate data=${data} headers=${headers}
代码还有另一个问题;这一行:
${data} = evaluate json.load(open('/root/data.json', 'r')) json
,将有效加载提供的json文件,并将其转换为python对象(很可能是字典)。
然而,你不应该在请求中这样发送它 - 它必须被序列化为json格式(最大的区别是b / n json和python词典的字符串表示 - json不使用单引号{{1}作为分隔符)。
所以一旦你完成了这个,你就可以做到:
'
,它将把它改回来。或者,只需加载文件内容,而不是执行此前后转换。