• pytest之conftest


    fixture

    fixture(scope='function',params=None,autouse=False,ids=None,name=None):
    fixture里面有个scope参数可以控制fixture的作用范围,scope:有四个级别参数"function"(默认),"class","module","session

    params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
    autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture
    ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
    name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。

    1.firture相对于setup和teardown来说应该有以下几点优势

    scope:有四个级别参数"function"(默认),"class","module","session

    • 命名方式灵活,不局限于setup和teardown这几个命名
    • conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置
    • scope="module" 可以实现多个.py跨文件共享前置, 每一个.py文件调用一次
    • scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
    • scope="class":每一个类调用一次,一个类中可以有多个方法
    • scope="function":每一个函数或方法都会调用

    2、fixture的作用范围

    fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

    conftest.py配置文件

    单独管理一些预置的操作场景,pytest默认读取conftest.py配置文件

    使用场景:

    1、每个接口需共用到的token

    2、每个接口需共用到的测试用例数据

    3、每个接口需共用到的配置信息

    conftest.py结合fixture的 scope使用:

    1. scope默认为function

    conftest.py

    import pytest
    
    
    @pytest.fixture()
    def login():
        print("this is login method")

    test_conftest.py

    import pytest
    
    
    class TestConftest:
    
        def setup_class(self):
            print('setup class')
    
        @pytest.mark.usefixtures('login')
        def test_one(self):
            print('test one case')
            flag = 1
            if flag:
                print('测试111')
    
        @pytest.mark.usefixtures('login')
        def test_two(self):
            print('test two case')
    
        def test_three(self):
            print('test three case')
    
        def teardown_class(self):
            print('teardown class')
    View Code

    运行结果:

     2. scope="class",整个用例只运行一次

    conftest.py

    import pytest
    
    
    @pytest.fixture(scope="class")
    def login():
        print("this is login method")

    test_conftest.py代码不改

    运行结果:

    在setup_class之后,所有用例方法之前运行。例如启动浏览器操作

     3. scope="module" 所有模块

    conftest.py

    import pytest
    
    
    @pytest.fixture(scope="module")
    def login():
        print("this is login method")

    执行结果:

  • 相关阅读:
    [转]群控电梯调度算法
    [转] 电梯调度算法总结
    [转]grub2.0和之前版本修复解决方案
    [转]Ubuntu 10.04 编译安装最新版本Linux2.6.34内核
    [转]PS2 键盘工作方式
    [转]个人管理 - 目标管理之前,你会时间管理吗
    [转]ubuntu 下编译内核简单步骤
    [转]关闭Google安全搜索,实现无限制搜索
    [转]Vim 复制粘贴探秘
    [转]Linux文件搜索
  • 原文地址:https://www.cnblogs.com/SomnusWho/p/14253276.html
Copyright © 2020-2023  润新知