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

如何使用Pytest的caplog验证用户提示信息?

解决用caplog测试用户提示的问题

为什么caplog抓不到用户提示?

caplog是pytest专门用来捕获logging模块输出的日志(比如logging.warning、logging.error这类),如果你的用户提示是用print()直接输出到标准输出(stdout)的,不属于日志系统的内容,所以caplog根本捕获不到,自然是空的。

两种可行解决方案

方案1:用pytest的capsys/capfd捕获标准输出

pytest提供了capsys和capfd fixture,专门用来捕获程序的标准输出和标准错误,适合测试print()输出的提示信息。

修改你的测试代码如下:

def test_select_org_exact_prompt(atconn, monkeypatch, capsys):
    monkeypatch.setattr("builtins.input", lambda x: "1")  # 选择第一个组织
    atconn.select_org()
    assert atconn.organization == "default"

    # 捕获标准输出内容
    captured_out, captured_err = capsys.readouterr()
    # 断言提示信息存在于输出中
    assert "Please choose an organization:" in captured_out

方案2:修改函数,将提示信息加入日志系统

如果想继续用caplog,可以修改你的select_org函数,把用户提示用logging模块输出(比如logging.info),同时在测试中调整日志级别让caplog能捕获到:

第一步:修改select_org函数

import logging

class YourATConnClass:
    def select_org(self):
        # 把原来的print提示改成日志输出
        logging.info("Please choose an organization:")
        # 后续的输入逻辑不变
        user_choice = input(...)
        # 其他处理代码...

第二步:修改测试代码

def test_select_org_exact_prompt(atconn, monkeypatch, caplog):
    # 设置caplog捕获INFO级别及以上的日志
    caplog.set_level(logging.INFO)
    monkeypatch.setattr("builtins.input", lambda x: "1")
    atconn.select_org()
    assert atconn.organization == "default"

    # 检查捕获的日志中是否包含目标提示
    assert any("Please choose an organization:" in rec.message for rec in caplog.records)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:09:55