pyresttest - 无法从DELETE请求中读取正文

时间:2016-02-29 07:24:03

标签: python rest pyresttest

考虑以下模板,该模板用于从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版本。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

您不应该发送带有DELETE请求的有效负载。来自RFC 7231 § 4.3.5

  

DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。

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

答案 1 :(得分:0)

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