天天看点

软件测试系列:pytest框架之测试夹具fixture(一)

作者:Ray软件测试

一、用例运行级别

模块级(setup_module/teardown_module)开始于模块始末,全局的
函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
方法级(setup_method/teardown_method)开始于方法始末(在类中)
类里面的(setup/teardown)运行在调用方法的前后           

二、fixture使用

firture相对于setup和teardown有以下几点优势
1、命名方式灵活,不局限于setup和teardown这几个命名
2、conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置
3、scope=”module” 可以实现多个.py跨文件共享前置
4、scope=”session” 可以实现多个.py跨文件使用一个session来完成多个用例           

三、入门操作

import pytest

@pytest.fixture()
def func():
    print("我是前置 func")
    yield 12
    print("我是后置 func")

def test_data(func):
    assert func == 12
    print("我是 test_data")

def test_func(func):
    print("我是func函数")           
  1. 与setup、teardown类似,fixture提供了测试执行前和执行后的动作处理,但是又比setup、teardown好用
  2. fixture通过yield区分前后置,前后置可以单独存在;fixture如果有后置,都会执行后置(除非前置报错)
  3. fixture可用于封装数据,也可用于封逻辑动作,使用范围非常广
  4. fixture可用于代码模块化、数据处理、流程设计等

四、fixture的执行方式

1、函数引用

import pytest

@pytest.fixture()
def func():
    print("我是前置 func")
    yield 12
    print("我是后置 func")

def test_data(func):
    assert func == 12
    print("我是 test_data")           

2、自动适配-所有用例

import pytest

@pytest.fixture(autouse=True)
def func():
    print("我是前置 func")
    yield 12
    print("我是后置 func")

def test_func():
    print("我是func函数")           

3、usefixtures-手动调用

import pytest

@pytest.fixture
def func():
    print("我是前置 func")
    yield 12
    print("我是后置 func")

@pytest.mark.usefixtures('func')
def test_func():
    print("我是func函数")           

五、跨类、模块、包或会话共享fixture

软件测试系列:pytest框架之测试夹具fixture(一)
  1. 执行顺序遵循session->package->module->class->function
  2. 每一类fixture可以是多个,同类按书写先后执行
  3. 模块中的fixture对函数、方法均有效,class中的 fixture只对方法有效
  4. 每一个函数前后均会执行模块中的class
  5. 在模块和类中有同名的fixture存在时:如果是function,类中会覆盖模块中,其它的不会覆盖

六、conftest说明

conftest是一个Python模块,它用于管理pytest插件的参数。它允许在项目的不同部分定义和重用测试插件参数,而无需在代码中进行任何特殊调用。使用conftest.py文件可以让测试代码更加模块化,并且更容易维护。

  1. 文件名称默认为conftest.py
  2. conftest.py可以有多个,搜索优先级自底而上,下层会覆盖上层(特别注意)
  3. conftest.py中的fixture支持函数直接引用、手动调用,也可以自动适配
软件测试系列:pytest框架之测试夹具fixture(一)
软件测试系列:pytest框架之测试夹具fixture(一)