自动化测试66 条

用例隔离

用例隔离指任意用例都能单独运行、以任意顺序运行并得到一致结果:不共享可变状态、不依赖执行顺序、不残留数据;这是并行与重试能够成立的前提。

软件测试速查开发更新于 2026-10-13

用例隔离是什么

用例隔离指任意用例都能单独运行、以任意顺序运行并得到一致结果:不共享可变状态、不依赖执行顺序、不残留数据。这是并行执行、失败重试与随机排序得以成立的前提;隔离被破坏时,症状通常是「单跑通过、全跑失败」或 CI 上随机失败,排查成本极高。

基本信息

定义用例可独立、任意顺序运行且结果一致
四不原则不共享可变状态、不依赖顺序、不残留数据、不依赖真实时钟
常见破坏源共享夹具里的可变对象、全局缓存的登录态、自增主键假设
隔离手段用例自建数据并自清理、命名空间或租户隔离、可控时钟
受益能力并行执行、失败重试、随机排序都能安全启用

夹具自建自清

夹具自建自清
@pytest.fixture
def user(db):
    # 每个用例独立创建数据,名字带随机后缀
    u = db.create_user(name=f"user-{uuid4().hex}")
    yield u
    db.delete_user(u.id)   # 用例结束自清理

典型使用场景

  • 并行提速:隔离达标后可按用例并行,测试时间大幅缩短。
  • 失败重试:重试单条用例不依赖上下文,结果可信。
  • 随机排序:定期打乱执行顺序,提前暴露顺序依赖。
  • 环境重建:新环境上全量套件一次通过,无需人工补数据。
  • 定位排错:失败可复现,单条命令就能重放。
  • 共享资源治理:识别并收编散落在用例外的公共状态。

隔离破坏源与对策

破坏源典型表现对策
共享可变对象用例顺序不同结果不同每个用例重建夹具
固定账号并发执行互踢登录按用例派生独立账号
自增主键假设并行下键冲突随机键或占位标识
真实时钟跨日、跨时区失败注入可控时钟
常见破坏源:共享夹具中的可变对象、全局缓存的登录态、对自增主键的假设。
隔离不是绝对零共享:只读常量与只读配置允许共享,共享前先确认「不会写」。
验收方式:按随机顺序跑全量套件、连续多次通过,才说明隔离达标。

易错点

  • 用例依赖上一个用例写库的记录,单独运行即失败
  • 清理逻辑删除共享数据,影响并行执行的其他用例
  • 用例里用当前时间与随机数做断言,跨天或重跑结果漂移
  • 共享账号登录态被并发用例互相踢掉,产生偶发失败
  • 清理只覆盖成功路径,失败退出后脏数据残留污染后续运行

数据来源与参考

  • Google Testing Blog(测试隔离与 flaky 治理文章)
  • pytest 官方文档(fixture 作用域与状态)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌