• pytest框架之fixture前置和后置


    一、conftest.py

    • 定义公共的fixture,多个测试类中都可以调用
    • pytest提供了conftest.py文件,可以将fixture定义在此文件中
    • 运行测试用例时,不需要去导入这个文件,会自动去查找conftest.py文件,然后去找到对用的fixture

    二、前置和后置

    fixture函数根据关键字yield作为前置和后置的分割线,并且yield也可以接收返回值,作用相当于return

    import pytest
    
    @pytest.fixture()
    def init_demo():
        print("这是测试用例的前置")
        a = 1
        yield a  # 分割线(yield + 返回值)
        print("这是测试用例的后置")

    三、调用fixture

    1.在测试用例中直接调用

      将fixtures的函数名称作为测试用例的入参

      如果fixture有返回值,那么测试用例中的fixture函数名称就接收返回值,并且可以将fixture函数名称作为返回值使用

    def test_add_01(init_demo):
        b = init_demo + 2
        assert 3 == b

      运行结果:

    2.用fixture装饰器调用fixture

      在测试用例/测试类前面加上@pytest.mark.usefixtures('fixture函数名称')

      ps:定义conftest.py文件,在此文件中可以定义多个fixture,pytest会自动搜索此文件

    import pytest
    
    
    @pytest.mark.usefixtures('init_demo')
    def test_add_02():
        b = 1 + 2
        assert 3 == b

      运行结果:

      

    3.用autos调用fixture

    • 在定义fixture时,有一个参数autouse,默认设置的为False
    • 当默认为False,就可以选择用上面两种方式来使用fixture
    • 当设置为Ture时,在一个session内的所有的test都会自动调用这个fixture,建议该开关谨慎使用

      conftest代码如下:

    import pytest
    
    @pytest.fixture(autouse=Ture)
    def init_demo():
        print("这是测试用例的前置")
        yield
        print("这是测试用例的后置")

      测试代码如下:

    import pytest
    
    
    def test_add_02():
        b = 1 + 2
        assert 3 == b

      运行结果:

      

    四、fixture的继承(前置的前置,后置的后置)

    • 作用域(scope关键字):function/函数级(测试用例)、class/类级(测试类)、module/模块级(测试模块—py文件)、session/会话级(整个测试执行会话)
    • 形象比喻:夹心饼干
    • 继承条件:作用域由里向外继承作用域,也可以继承同级的作用域
    • 执行顺序:前置由外层到内层执行,后置由内层到外层执行,先执行最里层的作用域,在执行它的上一层作用域,直到再向外找不到作用域为止
    • 继承方法:直接将继承的fixture的函数名称作为入参传入即可
    • 返回值:继承父类的同时,也继承了父类的返回值

      conftest.py代码如下:

    import pytest
    
    
    @pytest.fixture(scope='session')
    def init_session():
        print("这是测试会话的前置")
        yield
        print("这是测试会话的后置")
    
    
    @pytest.fixture(scope='module')
    def init_module(init_session):
        print("这是测试模块的前置")
        yield
        print("这是测试模块的后置")
    
    
    @pytest.fixture(scope='class')
    def init_class(init_module):
        print("这是测试类的前置")
        yield
        print("这是测试类的后置")
    
    
    @pytest.fixture  # 相当于@pytest.fixture(scope='function')
    def init_function(init_class):
        print("这是测试用例的前置")
        yield
        print("这是测试用例的后置")

      测试代码如下:

    import pytest
    
    
    @pytest.mark.usefixtures('init_function')
    def test_demo():
        print('测试用例')
        assert 3 == 3

      运行结果:

      

  • 相关阅读:
    actionbar中添加searchview并监听期伸缩/打开的方法
    Java基础学习总结(87)——坚持写Java等技术类博客的好处
    Nginx学习总结(3)——Nginx配置及应用场景之高级配置
    [置顶] 软件版本命名规范及各阶段说明
    戏说云计算之PaaS,IaaS,SaaS
    App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
    Maven学习总结(30)——Maven项目通用三级版本号说明
    Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
    养成10个优秀的习惯
    Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解
  • 原文地址:https://www.cnblogs.com/xiaogongjin/p/11683535.html
Copyright © 2020-2023  润新知