Tempest学习笔记 002:Tempest脚本编写

1 Tempest脚本组成部分

class ServersTestJSON(base.BaseV2ComputeTest):

    @classmethod
    def setup_credentials(cls):

    @classmethod
    def setup_clients(cls):
    	super(DeleteServersTestJSON, cls).setup_clients()
        cls.client = cls.servers_client
        
    @classmethod
    def resource_setup(cls):

    @decorators.attr(type='smoke')
    @decorators.idempotent_id('2')
    def test_list_servers(self):
        # The created server should be in the list of all servers
        body = self.client.list_servers()
        servers = body['servers']
        found = [i for i in servers if i['id'] == self.server['id']]
        self.assertNotEmpty(found)

测试用例脚本包括装饰器、客户端调用、断言语句等组成部分。测试脚本中调用客户端向OpenStack平台发送HTTP报文,来完成资源的增、删、改、查。通过断言语句判断是否符合预期结果,决定测试用例是否通过。

2 装饰器

@decorators.idempotent_id()
为测试用例标记UUID,每个tempest测试用例都有一个唯一的UUID。在Linux下可使用uuidgen命令生成UUID。
@decorators.attr()
标注测试用例类型,如“slow”、“smoke”、“negative”。
@utils.services()
标记测试用例所需的服务。
@testtools.skipIf()
符合条件时跳过用例。
@testtools.skipUnless()
不符合条件时跳过用例。

3 调用客户端

test_list_servers中调用了self.client.list_servers()来获取虚拟机列表。在setup_clients()中可以看到self.client是cls.server_client的别名,一般这样做是为了使客户端的名字变简短,编写代码更方便。
在tempest/lib/services文件夹中可以找到对应的client,如下:

class ServersClient(base_compute_client.BaseComputeClient):
    
    def create_server(self, **kwargs):
       

    def update_server(self, server_id, **kwargs):
        
    def show_server(self, server_id):
       

    def delete_server(self, server_id):
       
    def list_servers(self, detail=False, **params):

        url = 'servers'
        schema = self.get_schema(self.schema_versions_info)
        if detail:
            url += '/detail'
            _schema = schema.list_servers_detail
        else:
            _schema = schema.list_servers
        if params:
            url += '?%s' % urllib.urlencode(params)

        resp, body = self.get(url)
        body = json.loads(body)
        self.validate_response(_schema, resp, body)
        return rest_client.ResponseBody(resp, body)

从代码中可以看出,客户端对应一种资源,包含该资源的增、删、改、查等操作。self.client.list()中主要做了以下几个操作:

  • 整理URL
  • 发送GET请求
  • 检查响应报文 (虚拟机管理的服务Nova涉及micro version的问题,其他服务的客户端可能没有此项)
    该函数是对资源的查操作,如果是增操作则有可能发送POST请求,请求的参数与OpenStack API对应,可查阅OpenStack API文档。

4 断言

断言是指有条件地在程序代码中触发异常,用于检查测试时是否符合预期结果。在tempest脚本编写过程中,常用的断言有如下几种:

断言 功能
assertEqual(a, b) 判断a是否与预期结果b相等
assertNotEqual(a, b) 判断a是否与b不相等
assertGreater(a, b) 判断a是否大于b
assertLess(a, b) 判断a是否小于b
assertIn(a, b) 判断a是否在预期结果b中
assertNotIn(a, b) 判断a是否不在b中
assertRaise() 判断是否抛出指定异常
发布了5 篇原创文章 · 获赞 0 · 访问量 86

猜你喜欢

转载自blog.csdn.net/yangfan16120029/article/details/105330305