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报文,来完成资源的增、删、改、查。通过断言语句判断是否符合预期结果,决定测试用例是否通过。
@decorators.idempotent_id()
为测试用例标记UUID,每个tempest测试用例都有一个唯一的UUID。在Linux下可使用uuidgen命令生成UUID。
@decorators.attr()
标注测试用例类型,如“slow”、“smoke”、“negative”。
@utils.services()
标记测试用例所需的服务。
@testtools.skipIf()
符合条件时跳过用例。
@testtools.skipUnless()
不符合条件时跳过用例。
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()中主要做了以下几个操作:
断言是指有条件地在程序代码中触发异常,用于检查测试时是否符合预期结果。在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() | 判断是否抛出指定异常 |