pytest-hypothesis 运行之间的测试隔离

test isolation between pytest-hypothesis runs

我刚刚将 pytest 测试套件从 quickcheck 迁移到 hypothesis。这工作得很好(并立即发现了一些隐藏的边缘案例错误),但我看到的一个主要区别与两个 属性 管理器之间的测试隔离有关。

quickcheck 似乎只是 运行 使用不同的参数值多次测试函数,每次 运行 我的函数范围的固定装置。这也会在 pytest 的输出中产生更多的点。

hypothesis 然而似乎 运行 只是测试函数的主体多次,这意味着例如在单个 运行 之间没有事务回滚。这意味着当我的测试将某些内容插入数据库时​​,我无法可靠地断言许多数据库条目,因为来自先前 运行 的所有条目仍将存在。

我是不是遗漏了一些明显的东西或者这是预期的行为?如果是这样,是否有办法获得 运行 假设已完成的数量作为在测试中使用的变量?

恐怕你有点卡住了,目前还没有很好的解决办法。

假设需要工作的方式(这是它对 pytest-quickcheck 的许多改进的来源)不符合 pytest 关于测试执行的假设。问题是 mostly on the pytest side - the current pytest fixture system has some very baked in assumptions about how you run a test that do not play well with taking control of the test execution, and the last time I tried to work around this I ended up sinking about a week of work into it before giving up and basically saying that either something needs to change on the pytest side or someone needs to fund this work 如果它会变得更好。