• 四、Pytest Fixtures 详解


    1.什么是fixture?

    答:fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源。等等。

    2.声明fixture
    @pytest.fixture()装饰器用于声明函数是一个fixture,下面是一个返回数值的简单fixture
    ch3/test_fixtures.py
    import pytest
    
    
    @pytest.fixture()
    def some_data():
    """返回特定数值"""
      return 42
    
    
    def test_some_data(some_data):
    """在测试中使用fixture返回数值"""
     assert some_data == 4
    3.通过conftest.py共享fixture

    conftest.py中的fixture可以供所在目录及其子目录下的测试文件使用。

    4.使用fixture执行配置及销毁逻辑
    与unnitest的对比:
    import unittest
    # 单元测试用例
    class TestDict(unittest.TestCase):
    def setUp(self):
      # 测试数据库中,进行连接数据库
            print("setUp")
    def test_now(self):
    print("我才是测试函数")
     
      def tearDown(self):
            # 测试数据库中,关闭数据库
            print("tearDown")
    ch3/a/tasks_proj/test/conftest.py
    import pytest
    
    
    @pytest.fixture()
    def task_db():
    """测试函数开始前的操作"""
    #  #setup:start db
    
    
    yield #测试进行中,该fixture会返回给测试函数yield后面的值
    
    
    """在测试中使用fixture返回数值"""
     #teardown:close 
    5.使用--setup-show回溯fixture的执行过程

    --setup-show选项用于查看测试过程执行的是什么,以及执行的先后顺序。fixture名称签名的F和S代表的是fixture的作用范围,F代表函数级别的作用范围,S代表会话级别的作用范围。

    6.使用fixture传递测试数据
    fixture非常适合存放测试数据,并且它可以返回任何数据。
    ch3/test_fixtures.py
    import pytest
    
    
    @pytest.fixture()
    def some_data():
    """返回特定数值"""
      return 42
    
    
    def test_some_data(some_data):
    """在测试中使用fixture返回数值"""
     assert some_data == 4
    7.使用多个fixture
    ch3/test_fixtures.py
    import pytest
    
    
    @pytest.fixture()
    def some_data():
    """返回特定数值"""
      return 42
      
    def other_data():
    """返回特定数值"""
      return 5
    
    
    def test_some_data(some_data, other_data):
    """在测试中使用fixture返回数值"""
     assert some_data == 42
     assert other_data == 
    8.指定fixture的作用范围
    import pytest
    
    
    
    
    @pytest.fixture(scope='function')
    def func_scope():
        print("函数级别的fixtue")
    @pytest.fixture(scope='module')
    def module_scope():
        print("模块级别的fixtue")
    @pytest.fixture(scope='session')
    def session_scope():
        print("会话级别的fixtue")
    @pytest.fixture(scope='class')
    def class_scope():
        print("类级别的fixtue")
    
    
    
    
    def test_func_01(func_scope,module_scope,session_scope):
        print("执行函数一")
    def test_func_02(func_scope,module_scope,session_scope):
        print("执行函数2")
    @pytest.mark.usefixtures('class_scope')
    class Test_class():
        def test_func_03(self):
            print("执行类函数3")
    
    
    
    
        def test_func_04(self):
            print("执行类

    执行结果:

    test_add.py 
    会话级别的fixtue
    模块级别的fixtue
    函数级别的fixtue
    .执行函数一
    函数级别的fixtue
    .执行函数2
    类级别的fixtue
    .执行类函数3
    .执行类函数4
    9.为fixture重命名
    @pytest.fixture(name="renamezhang")
    def some():
        return 1
    
    
    def test_someA(renamezhang):
        assert True
  • 相关阅读:
    开源跨平台数据格式化框架概览
    (12) MVC5 EF6 Bootstrap3
    前端构建利器Grunt—Bower
    深入理解JavaScript系列(33):设计模式之策略模式(转)
    为什么MVC不是一种设计模式(转)
    java Double保留小数点位数
    网线直接连接电脑可以上网,但通过无线路由器时却上不了网(转)
    How to install PL/SQL developer on linux (转)
    自己动手写CPU之第八阶段(4)——转移指令实现过程2
    Eclipse中SVN的安装步骤(两种)和用法
  • 原文地址:https://www.cnblogs.com/hlsam/p/13152730.html
Copyright © 2020-2023  润新知