跳转到: 导航, 搜索

Murano/TestsDocumentation

Murano 自动化测试描述

此页面描述了 OpenStack Murano 项目的自动化测试:如何下载和运行测试,如何理解失败测试的根本原因,以及每个提交执行的详细测试描述。

Murano 持续集成服务

Murano 项目拥有 CI 服务器,它会测试 Murano 组件的所有提交,并允许验证新代码不会破坏任何功能。

Murano CI 使用 OpenStack QA 云作为测试基础设施。

Murano CI URL: murano-ci.mirantis.com

对于每个仓库,都有两个任务:一个在 Ubuntu 上运行,另一个在 CentOS 上运行。

您可以在这里看到具有不同目标的几个 Jenkins 任务

  • 任务 'murano-dashboard-integration-tests-*' 允许验证对 murano-dashboard 仓库的每个提交在不同发行版上的情况。
  • 任务 'murano-engine-app-deployment-tests-*' 允许验证对 murano 仓库的每个提交在不同发行版上的情况


其他任务允许构建和测试 Murano 文档,并执行其他有用的工作以支持 Murano CI 基础设施。

Murano 自动化测试:UI 测试

Murano 项目具有 Web 用户界面,并且我们拥有 Murano Web UI 的测试套件。所有 UI 测试都位于 murano-dashboard 仓库 中。

所有 Murano Web UI 的自动化测试都使用高级 Selenium 库编写,该库允许使用字段标题和其他信息查找 Web 元素,而无需/使用 xpath。

如何运行

先决条件

使用以下命令安装 nose

easy_install nose
或者
pip install nose

这将安装 nose 库,以及 nosetests 脚本,您可以使用它来自动发现和运行测试。

安装 Murano Web UI 测试所需的外部 python 库

cloud computing openstack

下载并运行

确保已安装其他组件。

  • 克隆 murano-dashboard git 仓库
git clone https://github.com/openstack/murano-dashboard
  • 首先,需要在 functionaltests/config/config_file.conf 中更改默认设置,设置适当的 URL 和凭据。
   [common]
   horizon_url = http://127.0.0.1/horizon
   murano_url = http://127.0.0.1:8082
   user = WebTestUser
   password = swordfish
   tenant = WebTestProject
   keystone_url = http://127.0.0.1:5000/v2.0/


  • 转到存储测试的 "functionaltests" 目录
  • 部分测试使用应用程序目录,并为此上传一组应用程序包。要从特殊的 Murano 仓库上传一组标准包,需要创建并执行以下脚本,该脚本会克隆包含包的仓库,对其进行归档并将其存储在 'functionaltests' 文件夹中
   git_url="https://github.com/murano-project/murano-app-incubator"
   clone_dir="murano-app-incubator"
   git clone $git_url $clone_dir
   cd $clone_dir
   for package_dir in io.murano.*
   do
       if [ -d "$package_dir" ]; then
           if [ -f "${package_dir}/manifest.yaml" ]; then
               sudo bash make-package.sh $package_dir
           fi
       fi
   done
  • 所有准备工作完成。
  • 所有测试都分组为几个套件,要指定要运行的测试/套件,请在命令行中传递测试/套件名称
    • 要运行所有测试:nosetests sanity_check.py
    • 要运行一个套件:nosetests sanity_check.py:<test suite name>
    • 要运行一个测试:nosetests sanity_check.py:<test suite name>.<test name>


如果成功,您应该看到类似以下内容

..................................

Ran 34 tests in 1.440s

OK

还有许多命令行选项可用于控制测试执行和生成的输出。有关 nosetests 的许多命令行选项的帮助,请尝试

nosetests -h

Murano 自动化测试:Tempest 测试

所有 Murano 服务都有基于 tempest 的自动化测试,这些测试允许验证 API 接口和部署场景。

Murano 的 Tempest 测试位于:基本仓库


以下 Python 文件包含针对不同 Murano 组件的基本测试套件。

在 devstack gate 上运行的 API 上的测试 API 测试

  • test_murano_envs.py 包含一个测试套件,其中包含对 murano 环境的操作(创建、删除、获取等)
  • test_murano_sessions.py 包含一个测试套件,其中包含对 murano 会话的操作(创建、删除、获取等)
  • test_murano_services.py 包含一个测试套件,其中包含对 murano 服务的操作(创建、删除、获取等)
  • test_murano_repository.py 包含一个测试套件,其中包含对 murano 包仓库的操作

在 murano-ci 上运行的引擎上的测试 引擎测试

  • base.py 包含基本测试类和对部署 murano 服务的测试


如果您想知道此测试执行了哪些步骤,您可以查看代码中的测试场景中的注释。例如

   @attr(type='smoke')
   def test_get_environment(self):
       """
       Get environment by id
       Test create environment, afterthat test try to get
       environment's info, using environment's id,
       and finally delete this environment
       Target component: Murano
       Scenario:
           1. Send request to create environment.
           2. Send request to get environment
           3. Send request to delete environment
       """
       resp, env = self.create_environment('test')
       self.environments.append(env)
       resp, infa = self.get_environment_by_id(env['id'])
       self.assertEqual(200, resp.status)
       self.assertEqual('test', infa['name'])
       self.delete_environment(env['id'])
       self.environments.pop(self.environments.index(env))