1、fixture依赖其他fixture
添加了 @pytest.fixture,如果 fixture 还想依赖其他 fixture,需要用函数传参的方式,不能用 @pytest.mark.usefixtures() 的方式,否则会不生效。
1、创建test_fixture3.py文件
脚本代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:伤心的辣条
"""
import pytest
@pytest.fixture(scope="session")
def open():
print("===打开浏览器open===")
@pytest.fixture
# @pytest.mark.usefixtures("open") 不可取、不生效
def login(open):
# 方法级别前置操作setup
print("===登陆操作login===")
def test_case(login):
print("===执行用例test_case===")
2、执行结果:
执行用例test_case,会先执行login,但login里会先执行open
所以执行顺序是open->login->test_case
2、fixture重命名
fixture 允许使用 @pytest.fixture 的 name 参数对 fixture 重命名。
1、创建test_fixture_3.py文件
脚本代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:伤心的辣条
"""
import pytest
@pytest.fixture(name="AllTests")
def fixturefun():
print("====fixturefun====")
@pytest.mark.usefixtures("AllTests")
def test_case():
print("====执行用例====")
2、运行结果:
3、fixture之request
为请求对象提供对 request 测试上下文的访问权,并且在 fixture 被间接参数化的情况下具有可选的“param”属性。
参数:
-
fixturename = None: 正在执行此 request 的 Fixtures。
-
scope = None: 范围字符串,“方法”,“类”,“模块”,“会话”之一。
-
fixturenames: 此 request 中所有活动 Fixture 方法的名称。
-
node: 底层集合节点(取决于当前 request 范围)。
-
config: 与此 request 关联的 pytest 配置对象。
-
function: 如果 request 具有按方法范围,则测试函数对象。
-
cls: 收集测试函数的 class(可以是None)。
-
instance: 收集测试函数的实例(可以是None)。
-
module: 收集测试函数的 python 模块对象。
-
fspath: 收集此测试的测试模块的文件系统路径。
-
keywords: 底层节点的关键字/标记字典。
-
session: pytest 会话对象。
-
addfinalizer(finalizer): 在 request 测试上下文完成执行的最后一次测试之后添加要调用的终结器/拆卸函数。
-
applymarker(marker): 将标记应用于单个测试函数调用。如果你不希望在所有函数调用中都有关键字/标记,则此方法很有用。
创建test_fixture_request.py文件
fixture函数可以通过接受request对象来反向获取请求中的测试函数、类或模块上下文。
request.module属性从测试模块中获取smtpserver值。
脚本代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:伤心的辣条
"""
import pytest
import smtplib
@pytest.fixture(scope="module")
def