如何让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
相关产品推荐
相关产品推荐

