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 目录结构
图 2.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 是否正常工作。
(一)首先还是确认 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
(三)接下来用 test_list_image_SCEDriver.py 文件创建 test case,注意测试中对 SCE 的操作,为方便演示而直接包括了一些可复用的代码(常用到的 SCE 操作可添加到 common 及 service 下):
图 6
上面的测试结果通过,说明 SCEDriver 能够正常将 SCE Server 上的 image 信息同步到 OpenStack。
文章出处: IBM DW
收藏 (3)
分享