You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:00:50