zoukankan      html  css  js  c++  java
  • 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")

    执行结果:

  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/SomnusWho/p/14253276.html
Copyright © 2011-2022 走看看