Tempest 是 OpenStack 官方测试套件。它的目的是在 OpenStack 集群中运行 OpenStack API 验证测试,以了解我们云的健康状况。它也用作验证提交到 OpenStack 核心项目的关卡——它将避免在合并更改时破坏它们。有关 Tempest 的更多信息,请参阅开发者文档和源代码仓库。
由于社区中提出的新功能,我们可以为 Tempest 的代码创建独立的插件,以在 OpenStack 上运行自定义测试用例。这种方法称为 Tempest 测试插件接口。
通过这个接口,任何项目都可以运行一组外部测试作为 Tempest 运行的一部分。现在我们只需要担心创建插件来将我们的测试用例组合在一起,我们可以忘记将自定义测试用例集成到 Tempest 代码结构中的复杂性。这意味着更多的独立性和灵活性!
插件结构
Tempest 插件基本上是一个 Python 包,其中包含您的自定义测试用例。它需要安装在 Tempest 所在的本地或虚拟环境 (venv) 中。当 Tempest 运行时,它将发现所有已安装的插件,而无需您执行任何额外的操作。
目录结构
setup.cfg
setup.py
README.rst
plugin_dir/
__init__.py
config.py
plugin.py
tests/
__init__.py
api/
__init__.py
base.py
test_hello_world.py
scenario/
__init__.py
-
setup.cfg: 包含包元数据。例如:名称、版本、摘要、作者等。有关完整列表,请参阅:元数据文档。
在此文件中,最重要的是指定入口点,即项目主类的位置,这将允许 Tempest 找到插件。
考虑以下示例,其中 hello-world-tempest-plugin 是插件的名称,hello_world_tempest_plugin 是文件结构中插件文件夹的名称,MyPlugin 是主类名称。因此,入口点将是
[entry_points] tempest.test_plugins = hello-world-tempest-plugin = hello_world_tempest_plugin.plugin:MyPlugin
- setup.py: 全局插件的要求在此处指定。在这种情况下,只需要 pbr。
- README.rst 关于项目的信息。
- plugin_dir: 主文件夹,通常具有插件的名称。示例:hello_world_tempest_plugin。
- config.py: 包含插件中测试所需的配置变量。
- plugin.py: 插件的主类,入口点,其中包含 Tempest 运行插件所需的所有配置。您只需实现 抽象类中的方法。
- tests: 必须包含所有测试的文件夹。
- api: 所有与 API 测试相关的测试用例。
- scenario: 所有与场景测试相关的测试用例。
您可以查看 hello-world-tempest-plugin 作为构建您自己的插件的参考。此存储库是一个基本插件,它运行一个 hello world 测试用例。
在接下来的步骤中,我将在命令中使用该插件作为示例。
安装
当 Tempest 运行时,它将自动发现已安装的插件。因此,我们只需要安装包含插件的 Python 包。
升级 pip 和 setuptools
$ pip install -U pip
从插件根目录安装软件包
$ cd hello-world-tempest-plugin
$ sudo pip install -e .
使用虚拟环境
如果您在虚拟环境中运行 Tempest,则必须确保包含插件的 Python 包也安装在 venv 中。
例如,在 Tempest (通过 Rally) venv 中安装插件
$ . ~/.rally/tempest/for-deployment-x-x-x-x-x/.venv/bin/activate
$ ~/.rally/tempest/for-deployment-x-x-x-x-x/.venv/bin/pip install -e ~/hello-world-tempest-plugin/
验证插件是否正确安装
$ ~/.rally/tempest/for-deployment-x-x-x-x-x/.venv/bin/pip list
如何运行测试
-
要验证 Tempest 是否发现了插件中的测试,您可以运行
$ testr list-tests | grep hello_world_tempest_plugin
此命令将显示插件中测试用例的完整列表。
-
您可以通过名称或运行用作装饰器的集合名称来运行测试用例,通过 testr (Tempest) 或 Rally
$ testr run hello_world_tempest_plugin.tests.api.test_hello_world.TestHelloWorld.test_hello_world
$ testr run --subunit smoke | subunit-2to1 | ./tools/colorizer.py
$ rally verify start --set smoke
资源
- http://docs.openstack.org/developer/tempest/plugin.html
- http://docs.openstack.org/developer/tempest/
- https://github.com/MBonell/hello-world-tempest-plugin
- https://wiki.openstack.org/wiki/Testr
- https://github.com/openstack/rally
- https://python-packaging-user-guide.readthedocs.org/en/latest/distributing/
演讲者访谈
本文是为期四天的 OpenStack 云软件开发者、用户和管理员会议 OpenStack 峰会东京站的 演讲者访谈系列的一部分.
评论已关闭。