2016-02-29 49 views
0

请考虑使用以下用于从数据库中删除实体的模板。pyresttest - 无法从DELETE请求中读取正文

- 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

是的我确定错误来自于此测试。只有这个测试失败了,我的日志有例外。与卷曲相同的请求没有任何问题。 – Pradeep

+0

问题现在包括stackrace! – Pradeep

回答

0

这是测试框架(PyRestTest)中的honest to goodness bug,现已修复。根本原因在于PyCurl想要以与POST请求相同的方式(来自POSTFIELDSIZE的大小)设置DELETE,而不是像PUT(INFIELDSIZE)那样。

+0

感谢您的评论。该错误已解决,现在我可以读取正文。 – Pradeep

1

您不应该通过DELETE请求发送有效载荷。 From RFC 7231 § 4.3.5

DELETE请求消息中的有效载荷没有定义的语义;发送DELETE请求上的有效内容主体可能会导致一些现有的实现拒绝请求。

即使pyresttest支持它,它也是非标准的,并且正在使用的服务器/代理可能不支持它。

+0

与卷曲相同的请求正常工作。请求处理程序期望正文存在。 – Pradeep

+0

当然 - 正如说明书所说,这是非标准的并且不一致的支持。所以有些软件可以和它一起工作,有些则不会。如果请求处理程序期望主体存在,那么您应该重新检查您的API设计,因为它不可靠地得到支持。 – Jim