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

Pytest未触发异常排查:接口测试返回200而非预期500

问题根源:Mock路径错误

你遇到的核心问题是mock的路径不对——你patch的是app.usecase.bulk.bulk_insert,但接口代码里实际调用的bulk_insert并不是这个路径下的对象,而是被导入到接口模块后的副本,导致mock完全没生效。

验证方法

在接口代码里加一行打印,确认bulk_insert的实际模块路径:

@blueprint.post("/bulk")
@validate()
def bulk(body: BulkRequestBody) -> tuple[BulkResponseBody, int]:
    print(bulk_insert.__module__)  # 打印实际模块路径
    try:
        bulk_insert(body.items)
        return BulkResponseBody(ok=True), 200
    except:  # noqa
        pass

    return BulkResponseBody(ok=False), 500

运行测试,输出的内容就是你需要patch的正确路径。

修正后的测试用例

假设接口代码所在文件是app/api/v1/bulk.py,且导入语句是from app.usecase.bulk import bulk_insert,那测试用例里要patch接口模块中的引用:

def test_bulk_500(mocker, client):
    # 改成接口模块里的bulk_insert路径
    mocker.patch("app.api.v1.bulk.bulk_insert", side_effect=Exception)

    response = client.post(
        "/v1/bulk",
        json={
            "items": [
                {
                    "title": "title",
                    "uri": "uri",
                    "date": "2021-01-01",
                }
            ]
        },
    )

    assert response.status_code == 500
    assert response.json == {"ok": False}

额外提醒

  • 记住规则:patch的是被调用代码所在模块中导入的目标对象,而非原对象的定义路径。
  • 接口里的except:捕获所有异常,建议改成捕获特定异常类型,避免隐藏其他潜在问题。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:35:05