fixture 写了 scope="session",第一个用例改过的用户对象被后面八个用例共用,断言里的余额越跑越小。日志里能对上时间点,这种反而好排。

session 作用域整个测试进程只执行一次,返回的是同一个可变对象。用例修改它,等于改了别人的初始数据。这一点先确认清楚,后面就不用反复试。

@pytest.fixture(scope="function")
def user():
    return User(balance=Decimal("100.00"))

「fixture 作用域」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

处理上按这个顺序:把 fixture 改成 function 级 每个用例拿新实例;共享的只放只读配置 可变数据不进 session;需要复用连接池时才用 session 并注明不可修改;固定顺序复跑一遍确认。

结果对不对很好判断,八个用例单独跑和一起跑余额都从 100 开始 结果一致。

作者 9823189