from freezegun import freeze_time
@freeze_time('2026-11-09 10:00:00')
def test_expire():
assert is_expired(ts)
本地测试全绿,流水线跑同样的用例却时不时失败。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:用例依赖真实当前时间或时区,跨环境时边界值落到不同日期。
「测试时间 mock」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。
处理上按这个顺序:统一注入可控时钟;固定时区;避免在断言里使用相对当前时间。
确认没问题再收工,同一用例在不同机器与不同时间执行结果稳定一致。