from freezegun import freeze_time
@freeze_time('2026-11-09 10:00:00')
def test_expire():
    assert is_expired(ts)

本地测试全绿,流水线跑同样的用例却时不时失败。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:用例依赖真实当前时间或时区,跨环境时边界值落到不同日期。

「测试时间 mock」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:统一注入可控时钟;固定时区;避免在断言里使用相对当前时间。

确认没问题再收工,同一用例在不同机器与不同时间执行结果稳定一致。

作者 9823189