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 如果它会变得更好。
我刚刚将 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 如果它会变得更好。