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

使用pytest验证docx报告生成脚本:测试通过但文件未生成

问题

我用Python docx库结合Pandas/Numpy实现计算功能,生成Microsoft Word报告。现在用pytest验证报告生成脚本fc1.py的输出是否正常,项目目录结构如下:

项目根目录
├── fc1.py
├── final_report/
├── reports/
└── tests/
    └── fc1_test.py

编写的fc1_test.py通过pytest.main调用带参数的fc1.py,之后验证目标文件是否存在。在Windows 10环境下运行pytest,测试显示通过,但final_report目录是空的,想知道是操作有误,还是pytest存在虚拟目录机制导致的?

问题分析与解决思路

1. 相对路径错位(最大概率)

pytest默认的工作目录是tests/,而非项目根目录。如果fc1.py里用了相对路径(比如final_report/report.docx),文件实际会生成到tests/final_report/里,而非你预期的根目录final_report/。先去tests/目录下检查有没有生成的报告文件。

解决办法:在fc1.py里用绝对路径生成输出,比如通过脚本自身路径动态获取项目根目录:

import os
# 获取fc1.py所在的项目根目录
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
# 拼接正确的报告输出路径
REPORT_SAVE_PATH = os.path.join(ROOT_DIR, "final_report", "你的报告文件名.docx")

2. pytest临时目录误用

pytest本身没有默认的虚拟目录机制,但如果你的测试脚本里用了tmp_path这类临时目录fixture,且不小心把输出路径指向了临时目录,测试结束后临时目录会被自动清理,导致你看不到文件。检查fc1_test.py里有没有误用这类fixture。

3. pytest.main调用方式错误

pytest.main是用来运行测试用例的,不是执行普通脚本的正确方式。你应该直接导入fc1.py里的核心生成函数,在测试用例中调用它,而不是用pytest.main去跑整个脚本。

错误写法示例:

# fc1_test.py 错误写法
import pytest
pytest.main(["../fc1.py", "--参数"])

正确写法示例:

# fc1_test.py 正确写法
import os
from fc1 import generate_report  # 假设fc1.py里有这个生成报告的核心函数

def test_report_generation():
    # 调用生成函数
    generate_report()
    # 构造根目录下的报告路径
    root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    target_report = os.path.join(root_dir, "final_report", "你的报告文件名.docx")
    # 验证文件存在且非空
    assert os.path.exists(target_report)
    assert os.path.getsize(target_report) > 0

4. 隐藏的写入异常

Windows下可能存在文件权限问题,或者fc1.py里捕获了写入异常但没抛出,导致测试只验证了路径存在(比如目录本身存在),但实际没生成文件。可以在fc1.py里加打印或日志,确认文件写入过程是否正常,或者在测试里增加文件大小的检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:34