OpenStack自动化功能测试

OpenStack自动化功能测试
OpenStack自动化功能测试

OpenStack自动化功能测试

一、OpenStack测试概要

随着,云计算在国内外的迅猛发展,OpenStack业已成为这方面的既定事实标准,而众多企业在基于OpenStack 开发云产品时,自然地,对测试方面的需求和质量提出了更高的要求。

目前,OpenStack社区已有近百个项目、数千名开发人员、数千万行代码和数百家公司参与其中。如何确保如此众多且水平不同、目的不同的开发人员,按照某种规则贡献智慧、提交代码,促进OpenStack开源社区有序、稳定健康发展。为此,社区在CI(持续集成)中提出了一种规则,——Gate,即门禁系统之意。凡开发人员提交代码(站在门外),均务必测试成功后(门禁系统验证身份通过),代码才会进入到Git仓库中(站在门内)。OpenStack测试,是一个涉及层面非常广泛和多技术交叉应用的领域。根据不同层面,即纬度的划分主要有:单元测试——>功能测试(也称为集成测试)——>系统测试(如验收测试、性能测试)等。根据特定的测试对象和目标,又可以分为存储测试、虚拟机网络测试、故障HA测试等。如下图所示。

在测试方面,OpenStack社区做得非常完善,针对不同的测试层面,设计并实现了相应的测试工具或项目。具体如,使用Python PEP8等测试代码编写是否符合规范,Nose等框架用于单元测试、Tempest用于功能/集

成测试、Rally用于性能测试、Shaker用于虚拟机网络测试、DevStack用于部署测试等,除此外,还有各种环境兼容性测试,如Python2.7和Python3.4、Centos系和Debian系等环境测试。

二、OpenStack功能测试设计与实现

以上,是对OpenStack测试的概要介绍,是一个面。这里,针对一个点进行详细阐述,即使用Tempest自动化测试OpenStack的功能,具体包括测试Keystone、Glance、Cinder、Nova、Neutron和Swift等项目功能。

由于Tempest大部分功能社区已经开发实现,所以在企业的研发测试环境下,用户可以按照自己的需求进行扩展使用等。目前,Tempest已广泛应用于CI持续集成、OpenStack社区互操作性测试认证等领域。

“工欲善其事,必先利其器”。首先,需要安装并配置好Tempest测试环境,由于Docker具有轻量、环境隔离、一次打包处处运行的优秀特性,故此,这里选择将Tempest安装部署在Docker容器中。

举个简单例子,当测试A环境的OpenStack时,需要构建好一个诸如Tempest在内的测试平台;当测试B 环境的OpenStack时,又需要构建好一个同样的测试平台;同时,因不同环境的反复配置容易导致测试环境配置错误。综上,选择Docker运行是一种更好的方式。

Tempest测试的实现是基于Python的unittest2和nose框架。通过对Openstack后端发起一系列API请求,并且对后端的响应进行验证。Tempest使用config配置文件来描述整个测试环境,包括Nova 、Keystone、Glance、Neutron等OpenStack相关服务。并同时支持JSON、XML 两种REST API 格式类型的测试,以及CLI 测试。

Tempest的优点

?Tempest可以自动寻找,执行测试:自动查找当前目录下所有以[Tt]est开头的Python源文件,并且按此规则递归查找子目录;所有以[Tt]est开头的Python源文件里所有以[Tt]est开头的function和class,以及继承自unittest.TestCase的class(不需要以[Tt]est开头)都会被执行。

?Tempest可以指定文件、模块、函数进行测试。

?Tempest可以指定类型进行测试。

?Tempest可扩展性强,可以方便的在tempest中添加其他测试用例,可以整合其他类型测试例如压力测试、场景测试等。

?Tempest是通过nose驱动的,python语言编写,使用testtools和testresources等几个测试工具库?Tempest.test.BaseTestCase,BaseTestCase声明config属性,读取配置文件

?Tempest.test.TestCase声明很多工具函数,供调用。每个测试可以分别测试JSON格式和XML格式当然,它的缺点是需要手动配置tempest.conf环境描述文件,工作量大,容易出错。

Tempest 代码主要结构,如下所示。其中,api和scenario部分的测试用例是我们关注的重点。

测试用例和REST API交互流程,如下图所示。

1)安装Docker和Tempest

编写dockerfile文件,用于构建Tempest镜像,内容如下所示

执行镜像构建命令

查看构建的镜像

以后台运行方式启动Tempest镜像

查看运行中的Tempest容器

进入到Tempest容器中,进行操作

2)配置文件使用tempest,需要配置tempest.conf和accounts.yaml两个文件。

这里,首先配置accounts.yaml文件。该文件内容包括了Tempest测试OpenStack所需要的认证信息,如租户、用户和密码等信息。示例如下:

接着,配置tempest.conf文件,这里以配置[identity]部分测试Keystone服务为例。如果需要测试诸如Compute、Network、Volume等服务,根据注释提示配置相关选项即可。示例如下。

在实际的测试环境中,QA测试人员会不断地编写各种类型的测试用例。对于我们自己开发的测试用例,自然十分清楚用例执行的类型、名称和内容等。对于Tempest、Rally和Shaker这种社区的自动化测试项目,我们如何了解其测试用例呢?

下面,是一个用于获取Tempest项目tempest/api目录下测试用例的bash脚本。

将以上内容写入脚本文件中,并放在Tempest目录下。执行该脚本,会在tempest result目录下分别输出testcase list.txt和testcase_total.txt文件,前者用于存放tempest/api目录下各项目服务的测试用例,后者用于存放每个项目服务的测试用例统计数量。

打开testcase_list.txt文件,部分内容如下:

查看testcase_number.txt文件,内容如下:

1.安装ipdb库

2.调试测试程序

如果某个用例执行出错,可能需要加入断点单步调试,可以用pdb调试库来完成调试工作,但笔者更建议用ipdb 库来调试,这个库更智能易用,它的缺点是非Python系统库,需要手工安装才能使用。

如果要加入断点单步调试,需要使用python -m testtools.run方法来执行被调试的用例,否则可能导致断点无法进入,也就没办法进行单步调试了,调试的第一步是在被调试的用例里面加上断点(下面以https://www.360docs.net/doc/8c9192657.html,pute.servers.test servers negative.ServersNegativeTestJSON.test rebootnonexistent ser ver用例为例进行说明,这里使用的是ipdb,pdb也是类似)。

之后,用python -m testtools.run运行这个用例即可进入断点调试模式。命令如下所示。

执行Tempest测试,既可以使用testr也可以使用nosetests、ostestr、run_tempest.sh脚本等命令,但社区推荐使用ostestr命令。这里以testr使用为例进行介绍。

这里以测试Keystone v2版本的test list tenants returnsonly authorized tenants测试用例为例。命令如下:

从下图中可以直接看到测试结果信息,这里显示该测试用例执行成功了,符合预期目的。

如果觉得这样的测试结果不方便浏览、分析或者出于保存用例的需要,也可以直接将该XML格式的结果文件拖放到Excel中浏览。

测试用例分析。

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

如下,是一些testr测试的相关命令

1)使用testr,查看命令帮助信息

执行以下命令前,首先需要加载测试环境

直接运行测试

测试结束后,查看失败的用例,并重新运行失败用例

批量运行api、scenario两个测试用例集

或者使用如下方法

或者,并行运行测试

或者,并行运行某一个测试用例集

运行单个测试用例

根据,OpenStack环境机器的CPU数量多少,设置并发量,比如这里设置为2。

执行测试分析

列出测试用例

执行Tempest的场景测试

或者

只重新运行失败的测试用例

为了更好的分析和浏览,我们可以将xml文件,直接拖放到Excel文档中。

2)测试结果

Tempest的测试结果有四种:测试错误(Error)、测试失败(Failure)、跳过(Skip)、成功(Success)。

其含义分别如下。

?测试错误:可以理解成测试代码执行时报错。比如测试代码中print a,而a没有进行变量声明。和setUp类似,如果代码在这个阶段出错,也都会被认为是测试错误(Error)。也可能是配置环境有问题。

?测试失败:可以简单理解成测试代码执行正常,但没有得到预期的测试结果,比如在测试代码中调用功能代码add(1, 2),但返回结果不是3。

?跳过:可以理解为测试忽略。比如某个用例只在CentOS系统下运行,这样在其他系统下就会被跳过,也就是忽略。还有可能是被测试的服务有bug。

?成功:测试用例执行成功,即测试程序返回的结果值符合预期的目的。

如何让Tempest API集成/功能测试自动化输出有利于分析和浏览的测试报告,并捕获测试中的失败用例,是QA测试人员工作的内容之一。我们需要尽可能地让看似模糊的测试结果可视化和数据化。

让Tempest测试自动化输出报告,需要使用HTMLTestRunner.py模块文件。其下载地址是:

https://www.360docs.net/doc/8c9192657.html,/software/HTMLTestRunner.html。

这里假定Tempest源码仓库位于/tempest目录下。则执行如下步骤。

将HTMLTestRunner.py和自动化测试程序文件(比如,这里提供的用例程序tempest_keystone.py)一并存放在Tempest目录下。代码如下:

相关主题
相关文档
最新文档