Tempest学习笔记 007:Tempest报文检查与schema

1 OpenStack API microversion

Openstack ReleaseNova APICinder APIGlance API
Stein2.66~2.723.56~
Rocky2.61~2.653.51~3.552.7
Queens2.54~2.603.44~3.502.6
Pike2.43~2.533.28~3.43
Ocata2.39~2.423.16~3.272.4~2.5

Nova采用小版本号,开发tempest时可通过查询小版本号确定tempest客户端与后端API是否匹配。

版本号采用X.Y的格式,新的版本采用单调递增X或Y形成新的版本号。X的增加代表较大的改动,破坏了向下兼容,Y的增加代表新功能的添加,不破坏向下兼容。

客户端可通过发送……/的方式查询API支持的版本,通过……/{api_version}/查询某个版本的具体信息。

客户端可规定请求的API版本,需要在HTTP请求的头部加入:

X-OpenStack-Nova-API-Version: 2.4

或:

OpenStack-API-Version: compute 2.4

2 microversion与schema

在Tempest学习笔记 004:Tempest源码阅读—客户端发送与接收报文中提到了tempest客户端检查报文格式的流程。tempest通过检查报文与schema是否一致来检查报文是否正确。

新开发的计算模块功能往往在已有API的基础上添加新字段来满足新的功能。如果tempest的schema不加以修改或添加,涉及相应接口的测试用例会报错。

2.1 修改旧版本的schema

以Nova中get_keypair API中添加type字段为例,2.2版本的Nova API加入了新的字段,需新建2.2版的keypair资源的schema:

  1. 在tempest/lib/api_schema/response/compute/下新建名为v2_2的文件夹

在这里插入图片描述

  1. 在v2_2文件夹中添加keypairs.py文件。
    文件中部分内容如下:
import copy
 
from tempest.lib.api_schema.response.compute.v2_1 import keypairs
 
get_keypair = copy.deepcopy(keypairs.get_keypair)
get_keypair['response_body']['properties']['keypair'][
'properties'].update({'type': {'type': 'string'}})
get_keypair['response_body']['properties']['keypair'][
'required'].append('type')

上一次对get_keypair API的修改在v2_1中,因此先将v2_1的keypairs导入并使用copy.deepcopy进行深拷贝。在拷贝结果的基础上添加新字段type。

  1. 对应的tempest 客户端中需要导入schema,并添加至schema_versions_info:
from tempest.lib.api_schema.response.compute.v2_2 import keypairs as schemav22
  
class KeyPairsClient(base_compute_client.BaseComputeClient):
 
    schema_versions_info = [{'min': None, 'max': '2.1', 'schema': schemav21},
                            {'min': '2.2', 'max': None, 'schema': schemav22}]

2.2 新增schema

2.1节的第二步中新建文件中的内容需自行添加,其余步骤与2.1节一致。

这里以microversion 2.1的keypair为例:

get_keypair = {
    'status_code': [200],
    'response_body': {
        'type': 'object',
        'properties': {
            'keypair': {
                'type': 'object',
                'properties': {
                    'public_key': {'type': 'string'},
                    'name': {'type': 'string'},
                    'fingerprint': {'type': 'string'},
                    'user_id': {'type': 'string'},
                    'deleted': {'type': 'boolean'},
                    'created_at': parameter_types.date_time,
                    'updated_at': parameter_types.date_time_or_null,
                    'deleted_at': parameter_types.date_time_or_null,
                    'id': {'type': 'integer'}
 
                },
                'additionalProperties': False,
                'required': ['public_key', 'name', 'fingerprint', 'user_id',
                             'deleted', 'created_at', 'updated_at',
                             'deleted_at', 'id']
            }
        },
        'additionalProperties': False,
        'required': ['keypair']
    }
}

status_code为接口返回正确时的状态码,状态码可不唯一,如[200, 202]也是可以的。

response_body中为报文的具体格式,返回字典格式可设置type为object,其中的键值写在properties中。

常用的几种类型为:

  • object—字典
  • list—列表
  • string—字符串
  • boolean—布尔型
  • integer—整数
  • number—浮点数

一些常用的如日期格式等均在/tempest/lib/api_schema/response/compute.v2_1的parameter_type中,可直接导入使用。

2.3 测试用例中规定microverson

一般Tempest根据配置文件的规定采用2.1版的API(默认值2.1).若测试用例无法工作在旧的API版本,则需新建类,在类中规定API的最小版本和最高版本,如:

class ServerShowV257Test(base.BaseV2ComputeTest):
    min_microversion = '2.57'
    max_microversion = 'latest'
 
    @decorators.idempotent_id('803df848-080a-4261-8f11-b020cd9b6f60')
    def test_rebuild_server(self):
        server = self.create_test_server(wait_until='ACTIVE')
        user_data = "ZWNobyAiaGVsbG8gd29ybGQi"
        # Checking rebuild API response schema
        self.servers_client.rebuild_server(server['id'], self.image_ref_alt,
                                           user_data=user_data)
        waiters.wait_for_server_status(self.servers_client,
                                       server['id'], 'ACTIVE')

参考资料:
Openstack CLI 版本 https://docs.openstack.org/releasenotes/python-openstackclient/
Nova API 版本 https://docs.openstack.org/nova/latest/reference/api-microversion-history.html
Cinder API 版本 https://docs.openstack.org/cinder/queens/contributor/api_microversion_history.html
Glance API 版本 https://docs.openstack.org/api-ref/image/versions/index.html#version-history
小版本号规范 http://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html
Nova 小版本号规范 https://opendev.org/openstack/nova-specs/src/branch/master/specs/kilo/implemented/api-microversions.rst

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值