设为首页 收藏本站
查看: 701|回复: 0

[经验分享] 使用Tempest Docker测试OpenStack

[复制链接]

尚未签到

发表于 2018-5-28 10:03:17 | 显示全部楼层 |阅读模式
一.为什么要用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\]\n|\[Service\]\nEnvironmentFile=-/etc/sysconfig/docker\n|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-reload
sudo service docker restart
6)现在,我们来验证 Docker 是否正常工作以及为下一步安装Tempest做足准备。为此,我们需要下载centos 7镜像。
$ sudo docker pull centos:7
7)下一步,我们运行下边的命令来查看镜像,确认镜像是否存在:
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED                  VIRTUAL SIZEdocker.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)查看,是否成功生成配置文件



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

通过,观察测试结果信息,我们已经知道该测试用例已经执行成功了。
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


作者简介:徐超。专注于工作和研究基于OpenStack产品研发测试过程的持续集成、持续测试和持续部署/交付领域,曾参与创建国内一OpenStack服务提供商从0到1+的测试体系。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482063-1-1.html 上篇帖子: 使用docker安装基于centos6.7系统环境下nginx 下篇帖子: Docker compose基于容器编排构建实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表