fixture request参数 (request是内部的一个fixture对象)

Fixture Request 详情见:

1 获取正在执行的夹具名称

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.fixturename

2 获取所有活动的fixture名称

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.fixturenames

3 获取夹具的scope范围/scope的value

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.scope

4 底层收集节点,获取node对象

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.node

4.1获取用例节点地址

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.node.nodeid

4.2获取用例名称

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.node.name

4.3获取用例文件的绝对路径

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.node.path

4.4获取标记将数据

```
import pytest


@pytest.fixture
def fixt(request):
    marker = request.node.get_closest_marker("fixt_data")
    if marker is None:
        # Handle missing marker in some way...
        data = None
    else:
        data = marker.args[0]

    # Do something with the data
    return data


@pytest.mark.fixt_data(42)
def test_fixt(fixt):
    assert fixt == 42
```

5 pytest 配置对象 config

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.config
  • pytest.ini文件配置数据

    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.getini("python_files")
    
  • 获取用例执行的父级目录

    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.invocation_dir
    
  • 获取项目根目录

    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.rootpath
    
  • 获取pytest.ini绝对路径

    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.inipath
    
  • 添加一个函数对象退出时调用函数

    def func():
        print("testfunc")
    
    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.add_cleanup(func)
    
  • 获取pytest.ini绝对路径

    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.inipath
    
  • 获取添加命令行命令pytest_addoption选项

    def pytest_addoption(parser):
      parser.addoption(
          "--cmdopt",
          action="store",
          default="type1",
          help="my option: type1 or type2",
          choices=("type1", "type2"),
      )
    
    
    @pytest.fixture
    def get_request_data(request: pytest.FixtureRequest):
        return request.config.getoption("--cmdopt")
    
  • 通过pytest_configure钩子 添加标记

    def pytest_configure(config):
      config.addinivalue_line(
          "markers", "p1: 这是一个p1级别的标记"
      )
    

6 如果请求具有每个函数的范围,则测试函数对象。

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request. function

7 返回测试用例的类对象。

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.cls

8 返回测试用的实例

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.instance

9 收集测试函数的Python模块对象。

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.module

10 返回测试模块的文件绝对路径。

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.path

11 底层节点的关键字/标记字典。可以转换成字典

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return dict(request.keywords)

12 Pytest会话对象。

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.session

13 添加在最后一次测试后调用的终结器,在执行完测试执行传入的函数(根据执行范围执行)

def po():
    print("123test")

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    return request.addfinalizer(po)

14 循环执行fixture


@pytest.fixture
def op2():
    print("zhanghq")

@pytest.fixture
def po():
    print("123test")


@pytest.fixture(params=["po","op2"])
def get_request_data(request: pytest.FixtureRequest):
    return request.getfixturevalue(request.param)

15 通过getfixturevalue函数执行fixture

@pytest.fixture
def get_request_data(request: pytest.FixtureRequest):
    request.getfixturevalue("xxxxx")
posted @ 2022-06-16 16:14  zhq9  阅读(144)  评论(0编辑  收藏  举报