<10>pytest:自定义前置后置 pytest.fixture

作用

实现前置步骤功能,方便用例调用

使用

装饰器:@pytest.fixture()

import pytest


@pytest.fixture()
def fixture1():
    print("\nfixture function 1")


@pytest.fixture()
def fixture2():
    print("\nfixture function 2")


@pytest.mark.parametrize("a, b", [(1, 1)], ids=['fixture'])
def test_case_fixture(fixture1, fixture2, a, b):
    print(f"a:{a}  b:{b}")
    assert True

fixture声明

fixture(
    fixture_function: Optional[_FixtureFunction] = None,
    *,
    scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",
    params: Optional[Iterable[object]] = None,
    autouse: bool = False,
    ids: Optional[
        Union[
            Iterable[Union[None, str, float, int, bool]],
            Callable[[Any], Optional[object]],
        ]
    ] = None,
    name: Optional[str] = None,
)

参数fixture_function

还没学 ( ̄▽ ̄)*

参数scope

作用:设置fixture生效范围
值列表:

  • function:方法级别,默认级别
  • class:类级别
  • module:模块级别
  • package:包级别
  • session:项目级别

参数params

作用:设置fixture函数参数
值获取:函数添加入参request,函数体使用request.param依次获取参数
注:

  • params将导致多次调用fixture函数和使用它的所有测试
  • 同时使用fixture params和mark.parametrize,将会笛卡尔积方式运行
    fixture params:
import pytest


@pytest.fixture(params=["a", "b", "c"])
def fixture_params(request):
    print("fixture_params print: " + request.param)


def test_case(fixture_params):
    assert True

fixture params + mark.parametrize:

import pytest


@pytest.fixture(params=["a", "b"])
def fixture_params(request):
    print("\nfixture_params print: " + request.param)


@pytest.mark.parametrize('num', [1, 2])
def test_case(fixture_params, num):
    print("test_case print: " + str(num))
    assert True

autouse

作用:设置fixture是否自动运行
值列表:

  • True:自动运行生效,等同setup/teardown
  • False:自动运行关闭
    注:
  • 直接调用实现setup效果
  • 使用yield实现teardown效果
import pytest


@pytest.fixture(autouse=True)
def fixture_autouse():
    print("\nsetup: fixture_autouse")
    yield
    print("\nteardown: fixture_autouse")


def test_case():
    assert True

ids

作用:用例命名
注:

  • 需要对应params使用
  • 同时使用fixture ids和mark.parametrize ids,将会使用 - 连接命名
    fixture ids:
import pytest


@pytest.fixture(params=["a"], ids=["fixture_a"])
def fixture_params_ids(request):
    print("\nfixture_params_ids print: " + request.param)


def test_case(fixture_params_ids):
    assert True

fixture ids + mark.parametrize ids:

import pytest


@pytest.fixture(params=["a"], ids=["fixture_a"])
def fixture_params_ids(request):
    print("\nfixture_params_ids print: " + request.param)


@pytest.mark.parametrize("num", [1], ids=["case_1"])
def test_case(fixture_params_ids, num):
    print("\ntest_case print: " + str(num))
    assert True

return

作用:在case中调用fixture,获取返回值

import pytest


@pytest.fixture()
def fixture_return():
    return "fixture_return return"


def test_case(fixture_return):
    print("\ntest_case print: " + fixture_return)
    assert True

posted @ 2021-12-06 10:32  漓白白"  阅读(42)  评论(0编辑  收藏  举报