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 测试添加服务标签