客户端返回单个值¶
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。
更改所有对客户端的调用,使其仅接收响应主体,并在必要时检查响应代码。