0

考虑以下用于从数据库中删除实体的模板。

- 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 版。可能是什么问题?

4

2 回答 2

1

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

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

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

于 2016-02-29T09:13:20.680 回答
0

这是测试框架 (PyRestTest) 中的一个诚实的错误,现已修复。根本原因是 PyCurl 希望使用与 POST 请求(来自 POSTFIELDSIZE 的大小)相同的方式设置 DELETE,而不是像 PUT (INFIELDSIZE)。

于 2016-03-05T20:07:34.240 回答