目录
一、fixture简介
固件(fixture)是一些函数,pytest会在执行测试函数之前(或之后)加载运行他们。我们可以利用固件在程序运行前做初始化,运行后做*,其中最常见的可能就是数据库的初始连接和最后关闭。pytest使用pytest.fixture()定义固件。
二、fixture功能
- fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。
- fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。
- fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture 适合于那些许多测试用例都只需要执行一次的操作。
- fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。
- fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。
三、fixture优势
- 命名方式灵活,不局限于 setup 和teardown 这几个命名
- conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
- scope=“module” 可以实现多个.py 跨文件共享前置
- scope=“session” 以实现多个.py 跨文件使用一个 session 来完成多个用例
四、fixture参数列表
1、示例代码:
@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
print("fixture初始化的参数列表")
2、参数列表 :
- scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session四个常用
- autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
- name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name
注意:
session的作用域:是整个测试会话,即开始执行pytest到结束测试
五、fixture使用
使用fixture函数需要两步:
- 定义fixture函数
- 如何调用:在函数括号中填写fixture函数、使用@pytest.mark.usefixtures(“login”)装饰器
如:
test_1和test_2都会输出‘输入账号,密码,登录’
执行结束后的*操作:
执行结果:
Python三大器:
- 生成器: yield 生成器就是特殊的迭代器,边计算边遍历,节省了内存
- 迭代器: 能用for …in…循环遍历
- 装饰器: @pytest.fixture(scope=‘function’,autouse=True) @符号
作用:给在不改变原来函数功能的前提下,增加额外的功能,体现代码的复用性