采用 Robot Framework 使用 ETSI NFV-TST API 测试代码

https://blueprints.launchpad.net/tacker/+spec/use-robot-api-tests

本提案旨在利用 NFV-TST 测试代码测试 Tacker 中实现的 ETSI NFV SOL002、003 和 005 的 API。

问题描述

NFV-TST 提供了用于测试 SOL002、003 和 005 API 的代码。但原始测试代码无法直接通过。这是因为每个 API 测试都有“先决条件”,即在运行测试之前需要执行的最后一个 LCM 操作。例如,用于“创建 VNF 包”的 API 测试需要“上传 VNF 包”作为其先决条件。

目前尚无实现来满足这些先决条件以运行测试。

提议的变更

我们的计划是在 tacker 社区中编写代码以满足先决条件,并使用 Robot Framework [1] 实现自动化的 API 测试。我们采用 ETSI NFV-TST010 [2] 发布 API 测试代码。

最终的 Tacker 测试改进计划如下。

  • 测试实施

    • 单元测试

      • 继续当前改进(与此规范无关)

    • 功能测试

      • 继续当前改进(与此规范无关)

      • 通过使用 Robot Framework 开发 Tacker 社区 robot 测试代码来扩展场景测试(未来工作)

    • 合规性测试

      • 使用 Robot Framework 的 NFV-TST 测试(NFV-TST010 是第一步,其他为未来工作)

要测试的 Tacker 实现的 API 列表

  • SOL002, SOL003

    • /vnf_instances

      • GET(查询多个 VNF 实例)

      • POST(创建一个新的“单个 VNF 实例”资源)

    • /vnf_instances/{vnfInstanceId}

      • GET(读取一个“单个 VNF 实例”资源)

      • PATCH(修改 VNF 实例信息)

      • DELETE(删除一个“单个 VNF 实例”资源)

    • /vnf_instances/{vnfInstanceId}/instantiate

      • POST(实例化一个 VNF 实例)

    • /vnf_instances/{vnfInstanceId}/scale

      • POST(按增量扩展 VNF 实例)

    • /vnf_instances/{vnfInstanceId}/terminate

      • POST(终止一个 VNF 实例)

    • /vnf_instances/{vnfInstanceId}/heal

      • POST(修复一个 VNF 实例)

    • /vnf_instances/{vnfInstanceId}/change_ext_conn

      • POST(更改 VNF 实例的外部连接)

    • /vnf_lcm_op_occs

      • GET(查询多个 VNF 生命周期管理

        操作发生的信息)

    • /vnf_lcm_op_occs/{vnfLcmOpOccId}

      • GET(读取一个“单个 VNF 生命周期管理

        操作发生”资源的信息)

    • /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback

      • POST(回滚 VNF 生命周期管理操作发生)

    • /vnf_lcm_op_occs/{vnfLcmOpOccId}/retry

      • POST(重试 VNF 生命周期管理操作发生)

    • /subscriptions

      • POST(订阅 VNF 生命周期变更通知)

      • GET(查询多个订阅)

    • /subscriptions/{subscriptionId}

      • GET(读取一个“单个订阅”资源)

      • DELETE(终止一个订阅)

  • SOL005

    • /vnf_packages

      • GET(查询 VNF 包信息)

      • POST(创建一个新的单个 VNF 包资源)

    • /vnf_packages/{vnfPkgId}

      • GET(读取单个 VNF 包的信息)

      • DELETE(删除单个 VNF 包)

使用 Robot Framework 和 NFV-TST010 测试代码进行测试的概述

+-------------------------------------------------------------+
|                                                             |
|          +-------------------------------------------+      |
|          |Tacker repository                          |      |
|          | +---------------+    +------------------+ |      |
|          | |Community robot|    |Zuul configuration| |      |
|          | |test code      |    |.zuul.yaml        | |      |
|          | |(future work)  |    +------------------+ |      |
|          | +---------------+                         |      |
|          |                      +------------------+ |      |
|          | +------------------+ |tox configuration | |      |
|          | |tacker/tests/     | |tox.ini           | |      |
|          | |functional/base.py| +------------------+ |      |
|          | +------------------+                      |      |
|          +-------------------------------------------+      |
|                                               |             |
|        +------------+  download (pip)         |             |
|        |            |  Robot framework        |             |
|        | python     +---------------------+   |             |
|        | repository |                     |   |             |
|        |            |                     |   |             |
|        +------------+                     |   |             |
|                                           v   v             |
|   +-----------------+  download          ++---+-+           |
|   |                 |  robot test code   |      |           |
|   | ETSI repository +------------------->+ Zuul |           |
|   | api-tests       |                    |      |           |
|   |                 |      +-------------+      +---+       |
|   +-----------------+      |             +------+   |       |
|                            |                        |       |
|                            | execute        execute |       |
|                            v                        v       |
|                      +-----+-----+        +---------+--+    |
|                      |           |        |            |    |
|                      | Robot     |  test  | Tacker     |    |
|                      | framework +------->+ (devstack) |    |
|                      |           |        |            |    |
|                      +-----------+        +------------+    |
|                                                             |
+-------------------------------------------------------------+

当启动 Zuul 测试时,将根据 tox.ini 从 python 仓库下载 Robot Framework 包,并从 ETSI 仓库下载名为“api-tests”的测试代码。之后,Zuul 为每个目标 API 执行合规性测试。在每个测试期间,将调用 Robot Framework 的例程,并验证目标 API 是否符合 ETSI NFV 规范。

‘tacker/tests/functional/base.py’ 用于创建先决条件。

注意

我们需要与 NFV-TST 讨论关于创建先决条件的实现。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

IPv6 影响

其他部署者影响

开发人员影响

编写新的 API 可能需要获取/编写 ROBOT 测试,以及单元测试和功能测试。

社区影响

备选方案

实现

负责人

主要负责人

  1. 井上 司 (Tsukasa Inoue)

其他贡献者

(待定 - T.B.D.)

工作项

  1. 编写 Python 代码以创建先决条件并运行 robot framework。

  2. 编写 tox.ini

  • 从 ETSI NFV-TST 仓库下载测试代码

  • 安装 Robot Framework

  • 使用上述 Python 代码运行测试

  1. 将上述 tox 作业添加到 Zuul 设置

依赖项

测试

符合 NFV 标准的 API 测试将在 Robot Framework 中执行。

Tempest 测试

功能测试

API 测试

符合 ETSI NFV-SOL002、003 和 005 标准的 API 由 Robot Framework 和 ETSI NFV-TST010 发布的代码进行测试。

文档影响

用户文档

开发人员文档

将添加完整的贡献者指南,以解释 Robot Framework 的概述以及如何在 Tacker 中使用它进行开发。

参考资料