hogwarts
(霍格沃兹测试学院官方)
1
题目:关于 pytest 的 fixture,下列说法正确的有(多选):
A. scope 支持 function、class、module、package、session 五种取值,决定 fixture 的创建与销毁频率
B. 作用域小的 fixture 不能依赖作用域大的 fixture,例如 function 级 fixture 不能 request session 级 fixture
C. 一个 session 级 fixture,在 CI 上把用例拆成 4 个并行进程执行时,全程只会执行 1 次
D. fixture 里用 yield 分隔,yield 之后的清理逻辑在用例失败时依然会执行
难度:中级
题型:笔试(多选)
hogwarts
(霍格沃兹测试学院官方)
2
参考答案/答题要点:
A、D。
B 错:低作用域 fixture 依赖高作用域 fixture 是完全合法的(function 级用例参数去 request session 级的数据库连接),反过来才会报 ScopeMismatch。
C 错:scope 的作用域边界是单个 pytest 进程,分片/并行、多目录多次执行都会各建一次,所以 session 级的「全局只初始化一次」假设在分布式执行下会失效(典型翻车:session 里做造数或清库,4 个进程互相踩数据)。
加分点:teardown 顺序与 setup 相反;autouse 只省显式引用,不改变执行时机;跨进程共享状态该用文件/环境变量/外部服务,而不是 session fixture。