Tempest 是一个旨在为云计算平台 OpenStack 提供集成测试的开源项目。它是基于 unittest2 和 nose 建立的灵活且易于扩展及维护的自动化测试框架,使得 OpenStack 相关测试效率得到大幅度提升。本文简要分析了 Tempest 的工作原理及其关键技术,并详细地介绍了如何实现 Tempest 配置与运行,最终结合实际的项目需求展示了如何对 Tempest 进行扩展。您可以通过本文了解 OpenStack Tempest,并进行合理地应用。

基于 Openstack 的 Tempest 测试框架介绍

Openstack 开源云介绍

OpenStack(OS)是由网络主机服务商 Rackspace 和美国宇航局联合推出的一个开源项目,于 2010 年 7 月 18 日正式启动,迄今为止已经得到二百多家公司的支持,其中包括很多大型企业,如 IBM,惠普、戴尔、红帽和 Canonical 等。OpenStack 是一个 IaaS(基础设施即服务)云计算平台,它的目标是为公有云、私有云和混合云提供实施简单、可大规模延展的、功能丰富的解决方案。

Tempest 测试框架介绍

Tempest 是 Openstack 的测试框架。和 Openstack 类似,Tempest 由社区人员维护。Tempest 测试框架包含 Openstack 基本组件(nova, keystone, glance, quantum, cinder)的测试用例,同时支持 JSON、XML 两种 REST API 格式类型的测试, 以及 CLI 测试

基于 Openstack 的 Tempest 实践

在准备 Tempest 测试环境之前,我们需要准备好被测试的 Openstack 环境。下面将简要介绍 Openstack 环境搭建。

Openstack 环境搭建

首先可以参考 Openstack 官方文档(OpenStack 安装)手动搭建 Openstack 环境,本文不再详细介绍。在搭建过程中您会深入了解 Openstack 相关知识,并且了解 Openstack 各个模块相关内容。

如果您对 Openstack 架构已经有一部分了解,推荐下面两种自动化安装 Openstack,并对其自动配置的方法。

第一种自动安装方式。如果您是 IBM 内部员工,还以用 IBM 内部 git 源下载 Openstack installer,下载后修改 build.include 文件设置您需要的配置,运行 runall.sh 文件进行自动安装。此 Openstack 自动安装脚本已经在 redhat6.4 x64 操作系统测试通过。

git clone -b osee-havana http://gerrit.rtp.raleigh.ibm.com/p/osee-tools.git

第二种自动安装方式。用 DevStack 自动安装 Openstack 最新社区代码并自动配置环境。您可以参考 DevStack 官方网站了解细节及其最新动态。

  • DevStack 官方推荐安装操作系统为 Ubuntu 12.04 (Precise)或者 Fedora 16
  • 执行以下命令下载 DevStack 到指定路径
git clone git://github.com/openstack-dev/devstack.git
  • 进入 DevStack 所在路径,并执行 stack.sh 脚本

Tempest 下载及环境搭建

如果您是用 DevStack 安装 OS 环境,Tempest 项目会自动被下载及配置在路径 /opt/stack/tempest。如果您是手动安装 OS 环境,或者用 IBM installer 安装 OS 环境,需要在社区手动下载 Tempest 项目并进行配置。 Tempest 下载地址 https://github.com/openstack/tempest,下载命令如下:

git clone https://github.com/openstack/tempest.git

Tempest 下载后,需要安装 unittest2 以及 nose Python 等库相关依赖。如果下载基于 OS Grizzly、OS Havana 最新的 tempest 项目,进入到 tempest 所在文件夹执行以下命令:

python setup.py install

如果下载 folsom 以及以前版本的 tempest 项目, 需要执行以下命令安装:

Unbuntu: pip install -r tools/pip-requirres(test-requires)
Redhat: pip-python install -r tools/pip-requires(test-requires)

Tempest 代码结构

对于 Tempest 项目,会有来自不同公司的社区成员对其进行更新。在最新的 tempest 项目中,增加入了对 OS CLI 的测试。本文重点基于 REST API 测试目录结构进行描述:

图 1.Tempest 目录结构

Tempest 目录结构

图 2.Tempest 代码结构

Tempest 代码结构

Tempest 测试 OS

Tempest 的配置文件 tempest.conf 在 /tempest/etc 路径下面,用户需要将 tempest 配置文件拷贝到/etc 路径下

cd $TMEPEST_ROOT_DIR
cp etc/tempest.conf.sample etc/tempest.conf

如果您用 devstack 搭建的 OS 环境,tempest 会自动配置在下面的路径, 同时会自动配置好 /opt/stack/tempest。

在 tempest.conf 配置文件中,分为以下 session, 这些 session 需要和测试的 OS 环境匹配。

  • [identity] – 这个 session 主要包括 user/tenant 相关的权限认证测试
  • [compute] – 这个 session 主要包括 OS Compute API/CLI 相关测试
  • [whitebox] – 这个 session 主要包括查看 Nova 数据库状态,ssh 到虚机中查看其状态等
  • [image] – 这个 session 主要包括 OS 镜像 API/CLI 相关测试
  • [network] – 这个 session 主要包括 OS 网络 API/CLI 相关测试
  • [volume] – 这个 session 主要包括 OS Cinder 存储 API/CLI 相关测试
  • [object-storage] – 这个 session 主要包括 OS Swift 对象存储 API/CLI 相关测试

运行及测试报告:

执行 tempest 所有测试用例

nosetests tempest

执行 tempest 某一个包下的所有测试用例,比如 identity 包下的所有测试用例

nosetests tempest/tests/identity

执行 tempest 某一个测试用例,比如 identity 包下的 test_tenants.py

nosetests tempest/api/identity/admin/test_tenants.py

下图为测试报告,用户可以参考以下文档了解 nosetests 更多用法。https://nose.readthedocs.org/en/latest/usage.html

图 3:Tempest 运行

Tempest 扩展实践

SCEDriver adpter 介绍

SCEDriver adapter 又名 iaassmartcloud,是由 IBM CSTL 研发的、使用 Python 语言编写的一个 Openstack 插件,与 iaasgateway 同属 OpenStack IaaS 系列应用程序。通过它可以在 OpenStack 中注册一个 compute node,实现管理 VMControl 和 VMware 的目的,实现的功能包括网络、镜像以及虚拟机的管理等

IaaSgateway 介绍

IaaSGateway 是 IBM 公司研发的一个组件,它的宗旨是为基于 IaaS(基础设施即服务)架构的云提供统一的 API, 为用户屏蔽掉不同类型的云之间的差异。其内部包含一系列的 adapter 用于处理不同的类型的 API,从而对外提供统一的接口,同时用户也可以对 adapter 进行扩展,并通过配置文件非常方便地为不同类型的云以及 API 选择相应的 adapter。

Tempest 扩展实践

目前对 Tempest 的扩展可分为以下几部分:

  • 对 Tempest 的 testcase 进行扩展,即添加 python unittest module,这些测试实例一般存放在 tempest/tests 目录下,可根据测试类别进一步划分。
  • 扩展 Tempest 的公共类以及 client,使得 testcase 的创建更为便捷,一般分别存放在 tempests/common 以及 tempests/services 目录下。
  • 扩展 Tempest 的环境变量,可进行更丰富的配置,通常是在 etc/tempest.conf 里添加新的环境变量,在 tempest/config.py 内补充对新增环境变量的解析。

对 Tempest 的扩展主要包括(但不限于)以上几种情况,这几种扩展能保持 Tempest 的代码结构,但某些情况下我们可以对它的代码结构进一步扩展,比如添加外部依赖的接口等。

Tempest 测试 iaasgateway

通过之前对 IaaSGateway 的介绍,我们了解到,IaaS Gateway 将为不同的 IaaS 架构的云提供统一的 API。 而 IaaSGateway 的 REST API 与 OpenStack 是比较相近的,所以我们只需要对 Tempest 的通用模块做较小的改动,就可以重用 Tempest 中大量现成的测试用例,并且基于调整后的框架添加新的测试用例也非常简便,这为 IaaS Gateway REST API 的自动化测试节约了很多时间,大大提高的工作效率。

整体思路将 IaaSGateway 和 OpenStack 做为两个黑盒子,比较它们之间 REST API 的差异,然后调 Tempest 框架对这些差异进行逐一的修改。IaaSGateway 与 OpenStack 的一个显著区别是 URL 不同。以 URL 为例,在 OpenStack Tempest Folsom 版本中,我们可以通过修改通用模块中的 config.py 脚本,以新的模式重新构建 URL。

图 4

对于 OpenStack Grizzly 版本,社区对 Tempest 框架做了改进,我们不再需要调整测试脚本,直接通过配置文件(tempest.conf)就可以实现对 IaaSGateway REST API 的测试。

Tempest 测试 SCEDriver

通过 Tempest 测试 SCEDriver 跟上文中测试 Openstack 非常类似,区别在于本测试将通过 SCEDriver 使得 SCE Server 作为 compute node。关于 SCEDriver 的安装配置过程请参考 IBM 官方文档,在正确地完成安装配置后,通过 nova-manage service list 命令可以检查到名为 nova-smartcloud 的服务状态正常。下面我们以通过 tempest 检索 SCE Server 上的 images 为测试用例来测试 SCEDriver 是否正常工作。

  1. 首先还是确认 tempest.conf 里的配置,在默认的配置基础上,本次测试主要关注以下几项配置:
[identity]
uri = http://demoHost:5000/v2.0/
username = demo
password = demo
tenant_name = demo
  1. 本次测试需要从 SCE Server 获取数据进行验证,因此扩展 SCE 相关的配置:
[SCE]
Host = sceServer
Username = sceAdmin
password = scePwd

修改 config.py 以解析 SCE 相关的配置:

图 5

  1. 接下来用 test_list_image_SCEDriver.py 文件创建 test case,注意测试中对 SCE 的操作,为方便演示而直接包括了一些可复用的代码(常用到的 SCE 操作可添加到 common 及 service 下):

图 6

上面的测试结果通过,说明 SCEDriver 能够正常将 SCE Server 上的 image 信息同步到 OpenStack。

http://t.cn/R2e5d8I

完毕。