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

如何修改unittest或pytest实现所有测试用例自动打印起止日志?

无侵入测试启停日志插桩方案

以下两种方案均不需要修改现有测试用例代码,可直接全局生效。

unittest 框架实现方案

unittest 内置的 TestCase 基类提供了每个测试用例执行前后的钩子方法 setUp 和 tearDown,我们可以通过 Monkey Patch 全局替换这两个方法,统一注入日志逻辑:

  • 把以下代码放到测试执行入口的最顶部,或者单独存为一个 patch 脚本,在执行测试前先运行该脚本即可:
import unittest

# 备份原始方法避免原有逻辑丢失
original_setUp = unittest.TestCase.setUp
original_tearDown = unittest.TestCase.tearDown

def patched_setUp(self):
    print("Start test")
    # 保留原有setUp逻辑
    if original_setUp:
        original_setUp(self)

def patched_tearDown(self):
    # 先执行原有tearDown逻辑
    if original_tearDown:
        original_tearDown(self)
    print("End of test")

# 全局替换基类方法
unittest.TestCase.setUp = patched_setUp
unittest.TestCase.tearDown = patched_tearDown

该方案对所有继承自 unittest.TestCase 的测试类都生效,无需修改任何测试用例代码。

pytest 框架实现方案

pytest 可以通过全局自动生效的 fixture 实现该需求,不需要修改任何测试代码:

  • 在测试根目录新建 conftest.py 文件,写入以下内容:
import pytest

# autouse=True 表示该fixture对所有测试用例自动生效,默认scope为function,每个测试用例执行一次
@pytest.fixture(autouse=True)
def inject_test_log():
    print("Start test")
    # yield 之前的代码在测试执行前运行,之后的代码在测试执行后运行
    yield
    print("End of test")

执行测试时pytest会自动加载conftest.py中的配置,所有测试用例都会自动触发日志打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:54:02