PyTest如何在conftest.py中配置会话级测试清理动作?
在pytest中实现session级gRPC服务器启停(无第三方依赖)
不用单独写后置测试函数,直接利用pytest fixture的yield语法就能实现会话级的前置/后置动作,这是pytest原生支持的功能,无需额外依赖。
正确实现方式
在conftest.py中定义一个session级别的autouse fixture,用yield分割启动和关闭逻辑:
import pytest # 导入你的gRPC服务器相关模块 @pytest.fixture(scope="session", autouse=True) def manage_grpc_server(): # 前置动作:启动gRPC服务器 grpc_server = your_start_server_function() # 替换为你的实际启动代码 grpc_server.start() yield grpc_server # 所有测试会在yield之后开始执行 # 后置动作:关闭gRPC服务器 grpc_server.stop(grace_period=5) # 替换为你的实际关闭代码
为什么之前的方式无效
你写的test_shutdown_request是独立测试函数,pytest只会执行被选中的测试模块里的用例——如果运行其他测试模块,这个函数不在目标模块中,自然不会被执行。而上面的fixture是session作用域+autouse=True,会自动在整个测试会话开始前执行启动逻辑,所有测试完成后执行关闭逻辑,不管你运行哪些测试模块。
可选:在测试中使用服务器实例
如果你的测试需要直接操作服务器对象,只需在测试函数参数中传入这个fixture即可:
def test_grpc_client_request(manage_grpc_server): # 这里可以直接使用manage_grpc_server实例,或者发起客户端请求 client = your_grpc_client_factory() response = client.some_rpc_method(...) assert response.success is True
内容的提问来源于stack exchange,提问作者wisenickel
相关产品推荐
相关产品推荐

