基于 Openstack 的 Tempest 测试框架的原理与实践

IBMdW 发布于 2014/03/13 14:22
阅读 3K+
收藏 3

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 运行
图 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
图 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 是否正常工作。

(一)首先还是确认 tempest.conf 里的配置,在默认的配置基础上,本次测试主要关注以下几项配置:

[identity]
uri = http://demoHost:5000/v2.0/
username = demo
password = demo
tenant_name = demo

(二)本次测试需要从 SCE Server 获取数据进行验证,因此扩展 SCE 相关的配置:

[SCE]
Host = sceServer
Username = sceAdmin
password = scePwd

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

图 5
图 5

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

图 6
图 6

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

文章出处: IBM DW

加载中
返回顶部
顶部