采用 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 测试,以及单元测试和功能测试。
社区影响¶
无
备选方案¶
无
实现¶
负责人¶
主要负责人
井上 司 (Tsukasa Inoue)
其他贡献者
(待定 - T.B.D.)
工作项¶
编写 Python 代码以创建先决条件并运行 robot framework。
编写 tox.ini
从 ETSI NFV-TST 仓库下载测试代码
安装 Robot Framework
使用上述 Python 代码运行测试
将上述 tox 作业添加到 Zuul 设置
依赖项¶
无
测试¶
符合 NFV 标准的 API 测试将在 Robot Framework 中执行。
Tempest 测试¶
无
功能测试¶
无
API 测试¶
符合 ETSI NFV-SOL002、003 和 005 标准的 API 由 Robot Framework 和 ETSI NFV-TST010 发布的代码进行测试。
文档影响¶
用户文档¶
无
开发人员文档¶
将添加完整的贡献者指南,以解释 Robot Framework 的概述以及如何在 Tacker 中使用它进行开发。