使用Tempest Docker测试OpenStack

一.为什么要用Tempest Docker

笔者,从事基于OpenStack产品的QA测试工作半年多来,一直对相关测试环境的构建记忆深刻,尤其是测试环境的安装和部署。举个很简单的例子,当测试A环境的OpenStack时,需要构建好一个诸如Tempest在内的测试平台;当测试B环境的OpenStack时,又需要构建好一个同样的测试平台;亦或者要运行诸如社区那样的分布式大规模异步测试任务等。

一般,为了构建这样的一个测试平台,即便是熟练者往往也需要花费30多分钟时间。通过使用Docker容器化,将Tempest独立于宿主机OS,而单独运行在容器中,可以做到系统隔离,平台复用和简单分化等高效作用。

社区对OpenStack的集成测试工具采用Tempest,性能测试采用Rally。Tempest的实现基于Python的unittest2测试框架和nose测试框架。Tempest对Openstack终端发起一系列API请求,并且对终端的响应进行验证。Tempest通过config文件来描述整个测试环境,包括compute 、Keystone、Glance、Neutron等OpenStack相关服务。

二.安装Docker

备注:

这里,我的测试环境是Tempest docker和OpenStack环境均构建在同一个CentOS 7中。

1)Docker 软件包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:

$ sudo yum install docker

2)当 Docker 安装完成之后,你需要启动 docker 进程:

$ sudo service docker start

3)如果我们希望 Docker 默认开机启动,如下操作:

$ sudo chkconfig docker on

4)配置Docker加速器。这里我们使用daocloud提供的docker镜像加速服务:

$sudo sed -i 's|other_args="|other_args="--registry-mirror=http://768e1313.m.daocloud.io |g' /etc/sysconfig/docker$sudo sed -i "s|OPTIONS='|OPTIONS='--registry-mirror=http://768e1313.m.daocloud.io |g" /etc/sysconfig/docker$sudo sed -i 'N;s|[Service]
|[Service]
EnvironmentFile=-/etc/sysconfig/docker
|g' /usr/lib/systemd/system/docker.service $ sudo sed -i 's|fd://|fd:// $other_args |g' /usr/lib/systemd/system/docker.service

5)重启服务:

sudo systemctl daemon-reloadsudo service docker restart

6)目前,我们来验证 Docker 是否正常工作以及为下一步安装Tempest做足准备。为此,我们需要下载centos 7镜像。

$ sudo docker pull centos:7

7)下一步,我们运行下边的命令来查看镜像,确认镜像是否存在:

 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/centos 7 bb3d629a7cbc Less than a second ago 196.6 MB

OK,事已至此,Docker和CentOS7镜像目前已经build好了。我们继续进行下一步。

三.安装Tempest

1)第一,我们需要进入到CentOS 7这个Docker镜像中,执行安装和配置任务等。

$ sudo docker run -i -t centos:7 /bin/bash

2)安装相关的依赖关系

# yum -y install epel-release# yum clean all && yum list && yum repolist all#yum install -y gcc git libxslt-devel openssl-devel libffi-devel python-devel python-pip python-virtualenv# pip install junitxml

3)下载和安装Tempest

# git clone https://github.com/openstack/tempest.git# cd tempest && python setup.py install# pip install -r requirements.txt 

4)生成Tempest配置文件

# pip install tox# tox -egenconfig # cp etc/{tempest.conf.sample,tempest.conf}

5)查看,是否成功生成配置文件

使用Tempest Docker测试OpenStack

6)编辑Tempest文件

由于,这里我们只测试OpenStack identity服务(Keystone)。所以,我们只针对了[identity]部分进行了相关的配置和运行Tempest测试,以此来验证我们的整个环节是否都是成功的。如果,你需要配置和测试诸如Compute、network、volume等服务,只需要按照注释配置相关选项即可。

如下,OpenStack identity服务配置:

# egrep "^[^#]" etc/tempest.conf[DEFAULT] [alarming] [auth] tempest_roles = Member #为tempest role设置的角色admin_username = admin #管理员用户名admin_tenant_name = admin #管理员租户名admin_password = admin #管理员用户密码[baremetal] [compute] [compute-feature-enabled] [dashboard] [data-processing] [data-processing-feature-enabled] [database] [debug] [identity] catalog_type = identity #测试的类型uri = http://10.10.10.129:5000/v2.0 #keystone服务的endpoint,用来与openstack环境镜进行交互auth_version = v2 #keystone服务的测试版本region = RegionOne #keystone服务的regionv2_admin_endpoint_type = adminURL #keystone服务的admin endpointv2_public_endpoint_type = publicURL #keystone服务的public endpointusername = demo #一个测试用户tenant_name = demo #一个测试租户admin_role = admin #一个测试角色password = 123456 #测试用户的密码[identity-feature-enabled] api_v2 = true #这里只测试v2版本的keystoneapi_v3 = false #不测试v3版本的keystone[image] [image-feature-enabled] [input-scenario] [negative] [network] [network-feature-enabled] [object-storage] [object-storage-feature-enabled] [orchestration] [oslo_concurrency] [scenario] [service_available] [stress] [telemetry] [telemetry-feature-enabled] [validation] [volume] [volume-feature-enabled]

7)执行Tempest测试

这里,我们测试的对象是Keystone服务v2版本中的
test_list_tenants_returns_only_authorized_tenants测试用例。

命令如下,所示:

# testr run tempest.api.identity.v2.test_tenants

使用Tempest Docker测试OpenStack

通过,观察测试结果信息,我们已经知道该测试用例已经执行成功了。

8)测试用例分析

# vim tempest/api/identity/v2/test_tenants.py 16 from tempest.api.identity import base 17 from tempest.lib import exceptions as lib_exc 18 from tempest import test 19 20 21 class IdentityTenantsTest(base.BaseIdentityV2Test): 22 23 credentials = ['primary', 'alt'] 24 25 @test.idempotent_id('ecae2459-243d-4ba1-ad02-65f15dc82b78') 26 def test_list_tenants_returns_only_authorized_tenants(self): 27 alt_tenant_name = self.alt_manager.credentials.credentials.tenant_name 28 resp = self.non_admin_tenants_client.list_tenants

该测试用例的主要测试内容是:检查用户只可以看见他所属租户下的用户;成功验证用户所使用的credentials和租户名;最后就是检查用户不能登录alt用户的租户。主要是调用assertEqual、assertRaises等断言方法来判断程序的执行结果和预期值是否相符。

四.保存Tempest Docker镜像

1)保存Tempest Docker镜像

当我们制作好了Tempest镜像之后,如果不做commit保存起来,那么container停止后来再启动,这些更改就消失了。在完成操作之后,输入 exit命令来退出这个容器。

# exitExit

目前,我们可以使用 docker commit 来保存镜像。

# docker commit -m="Install OpenStack for Tempest" -a="Xu chao" 00223cd24218 tempest/centos:v1 cea1cdc35096bf80be700f0a0b863426d5a443715779fc9a668866b37e50c9c5

这里的-m标识我们指定提交的信息,-a标识来指定一个作者,tempest/centos是一个新的镜像名,v1是版本号。

目前,我们可以使用 docker images 命令来查看我们的新镜像tempest/centos。

# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tempest/centos v1 cea1cdc35096 17 minutes ago 757.8 MB

2)使用我们的新镜像来运行Tempest docker

# docker run -i -t tempest/centos:v1 /bin/bash[root@108f70f3f92e /]#

3)最后,我们使用docker save 命令将镜像导出到本地文件,默认目录为执行docker命令的用户家目录下。

# docker save -o tempest_centos7.tar tempest/centos:v1

4)当我们把自己做好的镜像push到Docker Hub公共库或内部私有库中后,别人可以直接导入镜像或者pull(这将导入镜像以及其相关的元数据信息,包括标签等)。

# docker load < tempest_centos7.tar
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容