pytest篇7-pytest.fixture()中scope参数解析

01

引言

  1. 上一篇我们学习了confest.py文件的简单使用,也有所了解。可以适用于一些前置操作的场景下使用。目录层级下也可以有多个contest.py。

  2. 实际项目中,conftest文件实际应用中需要结合fixture来使用,今天我们一起学习一下pytest.fixture装饰器的运用。

02


源码/参数含义

大家可以看一下@pytest.fixture()的源码。可以有道翻译一波。

def fixture(
    fixture_function: Optional[_FixtureFunction] = None,
    *,
    scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",
    ‘’‘
    其余源码已省略,可以去官网查看
    ’‘'
  ***scope 默认为function,还有class、module、session****

scope参数

  • scope = 'function' -> 所有文件的测试用例执行前都会执行一次

  • scope = 'class' -> 测试文件中测试类执行前都会执行一次

  • scope = 'module' -> 每一个模块*.py文件执行前都会执行一次

  • scope = 'session' -> 所有测试文件执行前执行一次

03


scope = 'function'

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/7 7:50 下午
# @Author : Maynard
# @File : test_07ConftestFixture.py
# @Software: PyCharm


import pytest
@pytest.fixture(scope='function')
def test_function():
    print('函数开始之前运行')


def test_case_01(test_function):
    print('------测试用例1运行中')


def test_case_02(test_function):
    print('------测试用例2运行中')


if __name__ == '__main__':
    pytest.main(['-s','test_07ConftestFixture.py'])

运行结果:测试用例运行前都会执行一次

04


scope = 'class'

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/7 7:50 下午
# @Author : Maynard
# @File : test_07ConftestFixture.py
# @Software: PyCharm
import pytest
@pytest.fixture(scope='class')
def test_class():
    print('类开始前运行')


class TestDemoClass():
    def test_case_03(self,test_class):
        print('-----测试用例3运行中')


    def test_casse_04(self,test_class):
        print('-----测试用例4运行中')


if __name__ == '__main__':
    pytest.main(['-s','test_07ConftestFixture.py'])

运行结果:类运行前运行一次

05


scope = 'module'

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/7 7:50 下午
# @Author : Maynard
# @File : test_07ConftestFixture.py
# @Software: PyCharm
import pytest
@pytest.fixture(scope='module')
def test_module():
    print('模块开始前运行')


class TestDemoClass_1():
    def test_case_05(self,test_module):
        print('-----测试用例5运行中')


    def test_casse_06(self,test_module):
        print('-----测试用例6运行中')


class TestDemoClass_2():
    def test_case_07(self,test_module):
        print('-----测试用例7运行中')


    def test_casse_08(self,test_module):
        print('-----测试用例8运行中')
if __name__ == '__main__':
    pytest.main(['-s','test_07ConftestFixture.py'])

运行结果:每个模块执行之前执行一次

06


scope = 'session'

***目录层级***

conftest (一个package包)
   -- conftest.py
   -- test_47_1.py
   -- test_47_2.py

***confest.py***

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/6 8:09 下午
# @Author : Maynard
# @File : conftest.py
# @Software: PyCharm


import pytest
@pytest.fixture(scope='session')
def test_session():
    print('-------多个模块的用例,执行前执行一次')

***test_47_1.py***

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/7 7:56 下午
# @Author : Maynard
# @File : test_47_1.py
# @Software: PyCharm
import pytest
def test_case_10(test_session):
    print('测试用例10')

***test_47_2.py***

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/7 7:56 下午
# @Author : Maynard
# @File : test_47_2.py
# @Software: PyCharm
import pytest
def test_case_11(test_session):
    print('测试用例11')

命令行运行

 pytest -s conftest

运行结果:所有模块(*.py)运行前执行一次

07


总结

1、区分不同scope参数,不同的使用场景;

2、pytest.fixture()一般会结合conftest.py文件来使用;

02


PS

1、后续会继续总结pytest框架,个人觉得最强py单元测试框架;

2、大家有问题,可以通过公众号首页添加作者微信、多交流、多沟通;

3、欢迎转载文章,一起进步、一起学习;

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值