客户端返回单个值

https://blueprints.launchpad.net/tempest/+spec/clients-return-one-value

目前 tempest 客户端返回响应代码和主体。由于我们将响应检查移动到客户端,几乎所有客户端的调用者都忽略响应代码: 将成功响应检查移动到 tempest 客户端。如果客户端返回单个响应对象作为主体,并提供属性来获取响应状态和标头(如果需要),将会更简洁。

提议的变更

在 rest_client 中引入新的 ResponseBody 类

class ResponseBody(dict):
    """
    Class that wraps an http response and body into a single value.
    Callers that receive this object will normally use it as a dict but
    can extract the response if needed.
    """
    def __init__(self, response, body=None):
        body_data = body or {}
        self.update(body_data)
        self.response = response

    def __str__(self):
        body = super.__str__(self)
        return "request: %s\nBody: %s" % (self.response, body)

将所有 tempest 客户端更改为返回此对象,并更改所有对客户端的调用,去除当前响应的 ‘_’。

替代方案

理论上,这可以在 rest 客户端本身完成,而不是在每个服务客户端中,但这需要服务客户端具有更高的规律性。此外,由于所有测试目前都期望两个值,因此这将需要一次性更改所有内容。

主要考虑因素是不返回几乎总是未使用的值。另一种选择是在 rest 客户端方法中添加一个参数,指示是否应返回响应。我认为当前的方案更简洁。

实现

不幸的是,每个客户端类必须与对该客户端的所有调用同步更改。

负责人

主要负责人

David Kranz <dkranz@redhat.com>

其他贡献者

Yair Fried <yfried@redhat.com>

里程碑

完成目标里程碑

  • kilo-1

工作项(针对每个服务客户端)

  • 将 tempest 客户端中的所有方法更改为返回 ResponseBody。

  • 更改所有对客户端的调用,使其仅接收响应主体,并在必要时检查响应代码。