fixture request参数 (request是内部的一个fixture对象)
目录
- 1 获取正在执行的夹具名称
- 2 获取所有活动的fixture名称
- 3 获取夹具的scope范围/scope的value
- 4 底层收集节点,获取node对象
- 5 pytest 配置对象 config
- 6 如果请求具有每个函数的范围,则测试函数对象。
- 7 返回测试用例的类对象。
- 8 返回测试用的实例
- 9 收集测试函数的Python模块对象。
- 10 返回测试模块的文件绝对路径。
- 11 底层节点的关键字/标记字典。可以转换成字典
- 12 Pytest会话对象。
- 13 添加在最后一次测试后调用的终结器,在执行完测试执行传入的函数(根据执行范围执行)
- 14 循环执行fixture
- 15 通过
getfixturevalue
函数执行fixture
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")