pytest 固件作用域

固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。我们可以利用固件做任何事情,其中最常见的可能就是数据库的初始连接和最后关闭操作。Pytest 使用文件 conftest.py 集中管理固件。不要自己显式调用 conftest.py,pytest 会自动调用,可以把 conftest 当做插件来理解。

固件的作用是为了抽离出重复的工作和方便复用,为了更精细化控制固件(比如只想对数据库访问测试脚本使用自动连接关闭的固件),pytest 使用作用域来进行指定固件的使用范围。

在定义固件时,通过 scope 参数声明作用域,可选项有:

  • function: 函数级,每个测试函数都会执行一次固件;
  • class: 类级别,每个测试类执行一次,所有方法都可以使用;
  • module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
  • session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。
    #conftest.py
    
    import pytest
    @pytest.fixture(scope='function')
    def func_scope():
        pass
    
    
    @pytest.fixture(scope='module')
    def mod_scope():
        pass
    
    
    @pytest.fixture(scope='session')
    def sess_scope():
        pass
    

     

  • #test_scope.py
    
    def test_multi_scope(class_scope,sess_scope, mod_scope, func_scope):
        pass
    
    
    def test_multi_scope1(class_scope,sess_scope, mod_scope, func_scope):
        pass
    

    执行pytest --setup-show test_scope,可以看到  sess_scope  mod_scope只执行了一次,class_scope func_scope 在每个函数调用的时候都会被执行,引申作用,比如登录的 就可以写到func_scope中,保证每次脚本执行前都登录 数据库的链接 数据的初始化,可以放到sess_scope中,只需要做一次就可以。

对于类的作用域,就要用到pytest.mark.userfixtures,例子如下:

import pytest
@pytest.mark.usefixtures('class_scope')
class TestClassScope:
    def test_1(self):
        pass

    def test_2(self):
        pass

输出为:

此时我们改为func_scope,输出变为:

这种结果,和unitest中的setupclass 和setup 的用法就类似了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值