考虑以下模板,该模板用于从DB中删除实体。
- test:
- group: "Basic Test"
- name: "Delete 10.24.39.202"
- url: "/v1/switch"
- method: 'DELETE'
- expected_status: [200]
- body: '{"ip_address": "10.24.39.202"}'
- headers: {'Authorization': 'Basic ZGV2ZWw6WjNGSmVFTlliMUJvYlVSclVrOWhXRVp3ZDIwNFUzQktSekpzTjBnMGVYVT0=',
'Content-Type': 'application/json'}
这不起作用,我在解码正文时遇到以下错误:
Traceback (most recent call last):
File "/home/stack/git/bwc/bwc/server/switch.py", line 1880, in delete
request = json.loads(self.request.body)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
从更改日志中,pyresttest支持删除请求中的正文
1.6.0 Mon Oct 12 07:30:00 2015 -0400
BETA: support setting request body on all request types, if present
Allows (for example) DELETE methods that set a request body
Caveat: does not set length if 0
我确信我使用的是1.6.0版本。可能是什么问题?
答案 0 :(得分:1)
您不应该发送带有DELETE
请求的有效负载。来自RFC 7231 § 4.3.5:
DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。
即使pyresttest支持它,它也是非标准的,并且正在使用的服务器/代理可能不支持它。
答案 1 :(得分:0)
这是测试框架(PyRestTest)中的honest to goodness bug,现在已修复。根本原因是PyCurl想要使用与POST请求相同的方式设置DELETE(来自POSTFIELDSIZE的大小),而不是像PUT(INFIELDSIZE)那样。