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

如何让pytest在测试失败输出中正常显示DataFrame的换行与完整内容?

让pytest清晰展示DataFrame的几种方法

测试中pytest输出的DataFrame常被截断,换行符以\n形式显示,阅读困难,以下是几种解决办法:

方法1:调整Pandas显示参数 + 自定义断言消息

在测试代码中设置Pandas显示选项强制完整输出,并在断言中添加包含DataFrame的自定义提示,配合pytest的verbose模式运行:

import pandas as pd

# 配置Pandas禁止截断行、列,自动适配宽度
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)

def test_foo():
    df = pd.DataFrame({k: list(range(10)) for k in 'abcdefghij'})
    # 断言失败时直接输出格式化后的DataFrame
    assert len(df) == 0, f"DataFrame内容:\n{df}"

运行命令:

python3 -m pytest -v .

自定义断言消息会让pytest解析换行符,直接显示格式化的表格内容。

方法2:自定义pytest断言钩子

在项目根目录创建conftest.py文件,添加自定义断言比较逻辑,专门优化DataFrame的失败输出:

import pandas as pd

def pytest_assertrepr_compare(config, op, left, right):
    # 处理针对DataFrame长度的断言失败场景
    if op == "==":
        if isinstance(left, int) and isinstance(right, pd.DataFrame):
            return [
                f"断言失败: {left} == len(DataFrame)",
                "完整DataFrame内容:",
                f"{right}"
            ]
        elif isinstance(right, int) and isinstance(left, pd.DataFrame):
            return [
                f"断言失败: len(DataFrame) == {right}",
                "完整DataFrame内容:",
                f"{left}"
            ]

添加后无需修改测试代码,运行pytest时会自动输出格式化的完整DataFrame。

方法3:使用pytest-pandas插件

安装pytest-pandas插件,它会自动优化pytest输出中DataFrame的展示格式,处理换行和截断问题:

pip install pytest-pandas

安装后直接运行原测试命令即可:

python3 -m pytest .

插件会自动调整输出,让DataFrame以易读的格式展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:25:35