pytest
是一个非常流行的Python测试框架,它为开发人员提供了丰寴的测试工具和功能。
在pytest
中,固件(fixture)是一种非常核心的概念,用于设置测试前的预条件,清理测试后的环境,或者提供测试过程中需要用到的对象和数据。
request
是pytest
中一个特别的内置固件,它为测试函数提供了一种方式来获取有关当前测试请求的信息。
request
固件提供的功能包括但不限于:
- 获取当前正在运行的测试函数的相关信息。
- 动态地添加预置条件(固件)使用。
- 根据测试标记参数化测试。
- 强制调用其他固件。
- 在测试结束后执行清理任务等。
常用属性和方法
request.function
:当前执行的测试函数对象。request.module
:当前测试函数所在的模块对象。request.cls
:当前测试函数所在的类(如果有的话)。request.node
:代表当前测试项的节点对象,可以用来访问或者修改测试项的相关信息。request.param
:用在参数化固件中,能够获取与固件关联的参数值。request.fixturenames
:一个字符串列表,展示了当前测试或固件依赖的所有固件名称。request.addfinalizer
:为当前测试项添加一个在测试结束后会被调用的清理函数。
使用示例
下面是一些request
固件的使用示例,帮助你更好地理解其在实际测试中的用途。
访问测试函数名称
使用 request 获取当前测试函数的名称
@pytest.fixture
def sample_fixture(request):
print(f"\n当前测试函数名称为: {request.function.name}")
def test_example(sample_fixture):
assert True
在这个例子中,固件sample_fixture
使用request
打印当前测试函数的名称。
动态参数化固件
@pytest.fixture(params=[1, 2, 3])
def dynamic_fixture(request):
return request.param
def test_dynamic(dynamic_fixture):
assert dynamic_fixture < 4
此示例展示了如何使用request.param
动态为测试提供不同的参数值。
添加清理回调
@pytest.fixture
def setup_and_teardown(request):
# 设置代码
print("\n资源分配")
def teardown():
# 清理代码
print("\n资源释放")
request.addfinalizer(teardown)
def test_resource(setup_and_teardown):
assert True
在这个例子中,setup_and_teardown
固件使用request.addfinalizer
添加一个在测试完成后执行的清理函数。
总结
request
固件是pytest
中一个强大的功能,它让测试函数能够访问和修改测试的上下文信息,从而使得测试更加灵活和强大。通过深入学习和利用request
固件,你可以大大提高测试的效率和质量。
欢迎关注公众号,与Joker一起探索测试之道。