This work is licensed under a Creative Commons Attribution 3.0 Unported
License.

http://creativecommons.org/licenses/by/3.0/legalcode

为测试添加服务标签

https://blueprints.launchpad.net/tempest/+spec/add-service-tags

为所有测试添加新的标签,以指定测试所使用的服务。

问题描述

在运行 tempest 时,没有明确的方法来指定仅运行访问服务子集(subset)的测试。例如,如果您只想运行使用 cinder 的测试,以验证新的驱动程序,则没有简单的方法来过滤运行的测试,以便仅运行 cinder 测试。唯一的选择是手动构建一个正则表达式过滤器,执行您认为访问 cinder api 的测试。

提议的变更

为了添加一个新的装饰器,该装饰器将为指定的测试设置一个服务属性。该装饰器将有一个参数,即测试所使用的服务列表。装饰器只会接受列表中有效的服务功能名称,例如 compute、volumes 等。如果将无效的服务传递给装饰器,它将报错。最终结果是,如果您使用服务的功能名称作为正则表达式过滤器运行 tempest,您将仅运行直接或间接访问该服务的测试(例如,通过代理 api,如 nova 的 images api)。因此,对于问题陈述中的示例,您将运行

testr run --parallel volumes

或者命令的某种变体,并且只有使用 cinder 的测试将被运行。

仅当服务名称不在测试路径中时,才需要服务装饰器。如果测试使用包含名称在路径中的服务,则使用服务装饰器是多余的,因为正则表达式过滤器已经会匹配。对于场景测试,由于通常路径中没有服务名称,因此每个测试都需要服务标签。这将通过一个 hacking 规则来强制执行。

正确装饰的测试如下所示

@test.services('compute', 'volume', 'image', 'network')
def test_minimum_basic_scenario(self):

这表明 test_minimum_basic_scenario 使用 compute、volume、image 和 networking APIs。

添加服务标签的另一个特性是,通过标记测试,我们知道该服务是运行测试所必需的。这意味着如果所需的服务在配置文件中设置为不可用,我们可以跳过该测试。这意味着对于适用服务标签的测试,不需要额外的跳过装饰器或跳过异常。但是,对于不应使用服务标签的情况,例如补丁已经包含名称的地方,其他跳过方法将是必需的(它们应该已经有了)。

装饰器将放在 tempest/test.py 中,而 tempest 测试类别中的所有测试方法都可能应用该装饰器。当然,这假设上述使用条件已由相关测试满足。

实现

负责人

Matthew Treinish <mtreinish@kortar.org>

里程碑

完成目标里程碑

Juno-1

工作项

  • 添加服务装饰器

  • 为场景测试添加服务标签

  • 创建 Hacking 扩展以强制在场景测试中使用服务标签

  • 创建 Hacking 扩展以确保服务标签不在模块路径中

  • 为适用的 volume api 测试添加服务标签

  • 为适用的 compute api 测试添加服务标签

  • 为适用的 image api 测试添加服务标签

  • 为适用的 identity api 测试添加服务标签

  • 为适用的 network api 测试添加服务标签

  • 为适用的 orchestration api 测试添加服务标签

  • 为适用的 object api 测试添加服务标签