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

标签 python pytest quickcheck python-hypothesis

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

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

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

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

最佳答案

恐怕你有点卡住了,目前还没有解决这个问题的好方法。

假设需要工作的方式(这是它对 pytest-quickcheck 的许多改进的来源)不符合 pytest 关于测试执行的假设。问题是 mostly on the pytest side - 当前的 pytest fixture 系统有一些关于如何运行测试的假设,这些假设不能很好地控制测试执行,上次我试图解决这个问题时,我花了大约一周的时间在放弃之前进入它,基本上说要么需要在 pytest 方面进行更改,要么 someone needs to fund this work如果它会变得更好。

关于python - pytest-hypothesis 运行之间的测试隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956693/

相关文章:

python - 使用 Python 写入文件 -- '' 虽然未完成 :"Confusing Me

python - 使用 networkx 绘制图形时显示背景网格(也称为单元格)

python - 我可以在单个 Python pytest 方法中处理多个断言吗?

python - 使用通用测试函数中的 pytest fixture

haskell - 如何调用可能失败的构造函数,尤其是在实现 'Read' 和 'Arbitrary' 时?

haskell - 使用 Haskell 的 QuickCheck 生成特定长度的列表

haskell - 如何在main中使用quickcheck

Python 自动将一些字符串转换为原始字符串?

python - 我想基于上一列添加一个新的 DataFrame 列,以便如果上一列元素与列表值匹配,则更改该值

python - pytest - 在输出中显示测试模块名称