一.fixture介绍
fixture 是pytest框架的灵魂,fixture一般与conftest.py文件组合使用(写在conftest文件里面,供该目录下得文件调用)。pytest框架在收集用例时会率先执行conftest.py文件。conftest.py文件的作用范围是该目录以及该目录下得所有子目录。fixture分为内置和自定义,内置的可以直接调用。
二.内置fixture
常见内置fixture
request 是 pytest 的内置 fixture , "为请求对象提供对请求测试上下文的访问权,并且在fixture被间接参数化的情况下具有可选的“param”属性。"
class FixtureRequest[源代码](https://docs.pytest.org/en/latest/_modules/_pytest/fixtures.html#FixtureRequest) 请求对象提供对请求的测试上下文的访问,并且具有可选的 param 属性,以防设备被间接参数化。 fixturename 正在为其执行此请求的 fixture 名称。 scope 作用域字符串,“function”、“class”、“module”、“session”之一。 fixturenames 此请求中所有活动状态的 fixture 的名称。 node 基础集合节点(取决于当前请求范围)。 config 与此请求关联的 pytest 配置对象。 function 如果请求具有每个函数范围,则测试函数对象。 cls 类(可以是None),其中收集了测试函数。 instance 在其上收集测试函数的实例(可以是None)。 module 收集测试函数的Python模块对象。 fspath 收集此测试的测试模块的文件系统路径。 keywords 基础节点的关键字/标记词典。 session Pytest会话对象。 addfinalizer(finalizer: Callable[], object]) → None[源代码] 添加finalizer/teardown函数,以便在请求的测试上下文中的最后一个测试完成执行后调用。 applymarker(marker) → None[源代码] 对单个测试函数调用应用标记。 如果不希望在所有函数调用上都有关键字/标记,则此方法非常有用。 参数 marker -- A _pytest.mark.MarkDecorator 调用创建的对象 pytest.mark.NAME(...) . raiseerror(msg: Optional[str]) → NoReturn[源代码] 使用给定的消息引发FixtureLookupError。 getfixturevalue(argname: str) → Any[源代码] 动态运行命名的fixture函数。 如果可能,建议通过函数参数声明fixtures。但是,如果您只能在测试设置时决定是否使用另一个fixture,那么您可以使用此函数在fixture或测试函数体中检索它。 引发 pytest.FixtureLookupError -- 如果找不到给定的固定装置。
pytestconfig
request.config 获取配置对象。
内置fixture功能十分强大感兴趣可以官网研究,
三.自定义fixture
定义fixture需要使用@pytest.fixture()装饰,装饰过的函数就是fixture
栗子
@pytest.fixture(autouse=True) def test_cases_log(request): case_name = request.function.__name__ logger.info(f'*************** 开始执行用例:{case_name} ***************') yield logger.info(f'*************** 结束执行用例:{case_name} ***************')
参数
scope 执行范围`"function"``(default), ``"class"``, ``"module"``, ``"package"`` or ``"session"``
autouse 是否自动执行
params 参数
fixture可以使用' ' return ' '或' ' yield ' '语句提供它们的返回值来测试函数。当使用' ' yield ' '语句时,' ' yield ' '语句之后的代码块将作为teardown代码执行,而不管测试结果如何,并且必须精确地yield一次。