检查 CLI 测试的最低版本

https://blueprints.launchpad.net/tempest/+spec/minversion-check-for-cli-tests

Tempest 中添加了一些 CLI 测试,这些测试中的命令可能尚未在已发布版本的客户端中提供,因此下游打包者在 CI 中无法使用这些命令,导致测试失败。

问题描述

使用场景是测试稳定/icehouse 服务器代码,例如 nova,以及支持 Nova 稳定/icehouse 版本的客户端打包版本,在 2014.1 版本的服务器代码中,这对应于 python-novaclient-2.17.0。

使用无分支 Tempest 后,Tempest 没有稳定的/icehouse 分支,因此当新的 CLI 测试添加到 Tempest 的 master 分支,并且需要客户端中的命令或其他功能时,如果所需的命令/功能不在 pypi.python.org 上已发布的客户端版本中(打包者可能从那里获取他们的源代码 tar.gz),则这些测试可能会对下游打包者失败。

一个具体的例子是为 Nova 客户端添加的 server-group-list CLI 测试,该测试不在 python-novaclient 的已发布版本中。任何针对已发布版本的客户端运行 Tempest 的人都会使此新的 CLI 测试失败。

请注意,社区 gate CI 不存在此问题,因为 Tempest 是针对客户端的主干代码运行的,而不是已发布版本。

提议的变更

添加一个简单的装饰器,可以在 tempest/cli 测试中使用,用于检查安装的客户端版本是否至少达到支持该测试的最低版本,否则跳过该测试。

由于无分支 Tempest 策略以及缺乏稳定的/icehouse 分支,该装饰器将应用于 Icehouse 之后引入的特性测试。

替代方案

如果下游打包者/部署者没有针对客户端的主干代码运行 CI,那么对于这个问题,实际上没有好的替代方案。他们可以将 Tempest 的 HEAD 重置为服务器发布时间左右的任意提交,例如,对于 stable/icehouse 测试,可以重置为 2014.1 版本左右的某个时间点,但这样他们就会被冻结到该提交,并且无法获得在存在 Tempest 稳定分支时已经回移植的未来 bug 修复。另一种替代方案是手动排除不支持的 CLI 测试,但这很麻烦,并且只是在测试运行时才解决问题,而不是在代码中进行检查。

实现

负责人

Matt Riedemann <mriedem@us.ibm.com>

里程碑

完成目标里程碑

Juno-2

工作项

  1. 编写装饰器代码。正在进行中的补丁在这里

    https://review.openstack.org/#/c/100031/

  2. 将装饰器应用于 CLI 测试,主要关注在 2014.1 Icehouse 版本之后添加的任何测试,特别是那些需要比已发布版本中更新的客户端代码的测试。

依赖项