Pytest Fixture(三)

2023-03-12,

name: name参数表示可以对fixture的名称进行重命名:

注意:通过name重命名后,继续使用以前的名字调用会报错。

import pytest

@pytest.fixture(name='anjing')
def login():
print('\n登录操作')
yield
print('\n退出登录!') class TestLogin:
def test_01(self, anjing):
print('---用例01---') def test_02(self):
print('---用例02---') if __name__ == '__main__':
pytest.main(['-vs'])

  

params:参数化

  params表示fixture的参数化功能。这里会有一个request参数,主要用来接收fixture的返回结果。并通过request.param返回结果内容。

假设现在有一批 API 需要测试对不同数据库的支持情况(对所有数据库进行相同操作),最简单的方法就是针对每个数据库编写一个测试用例,但这包含大量重复代码,如数据库的连接、关闭,查询等。

使用固件抽离出数据库的通用操作,每个 API 都能复用这些数据库固件,同时可维护性也得到提升。

import pytest

@pytest.fixture(params=[
('redis', '6379'),
('elasticsearch', '9200')
])
def param(request):
print(f"数据库的配置:{request.param}")
return request.param @pytest.fixture(autouse=True)
def db(param):
print(f'数据库连接了{param}')
yield
print(f'数据库关闭了{param}') def test_api():
assert 1 == 1

  

执行结果

ids
  ids表示在fixture对参数化的内容进行加上标识,比如让别人知道这个传入的参数是什么意思。用于什么样的测试用例。默认是传参数内容:
 

import pytest

data = ['anjing', 'test', 'admin']

@pytest.fixture(params=data, ids=['user=anjing', 'user=test', 'user=admin'])
def login(request):
print('登录功能')
yield request.param
print('退出登录') class TestCase:
def test_01(self, login):
print('---用例01---')
print(f'登录的用户名{login}') def test_02(self):
print('---用例02---') if __name__ == '__main__':
pytest.main(['-vs'])

  

  

Pytest Fixture(三)的相关教程结束。

《Pytest Fixture(三).doc》

下载本文的Word格式文档,以方便收藏与打印。