问题标签 [python-hypothesis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

pytest - 有状态的测试给出了假设.errors.Flaky:运行最初失败,但第二次尝试成功

我正在尝试使用类似于此处所做的假设来解决一个难题:

http://nchammas.com/writing/how-not-to-die-hard-with-hypothesis

不幸的是,它会因 Flaky 错误而间歇性失败,我无法使用 pdb 追踪问题。

我的程序源在:

https://gist.github.com/sureshvv/0fb78ef221fb8c1ed85dd034c83abefa

它可以使用 py.test 运行。

任何诊断和解决问题的帮助表示赞赏。

0 投票
1 回答
296 浏览

python - 可以使用假设来生成特定类型的数据(即邮政编码或电话号码)吗?

我正在研究使用假设进行一些测试。我喜欢它可以生成大量数据来查找边缘情况。但是,我希望能够再定制一些测试。

例如,我可以定义一个测试来生成整数,但我希望这个测试符合有效的邮政编码很好。我可以这样做吗?或者,也许更复杂的符合非美国邮政编码,它们都是整数,但其他人(比如加拿大)不是?

对于预期符合某种掩码(即电子邮件地址)的文本字段,相同类型的东西将很有用。

现在我有这样装饰的测试用例:

对于这种特殊情况,我希望它也符合美国邮政编码规则。

对于这个,我希望它生成类似电子邮件格式的模式。

假设可以进行这种类型的生成吗?

0 投票
2 回答
102 浏览

python - 延迟评估 Django 模型的假设策略

我有一个 Django 模型。除其他外,它有一个ForeignKeyto User

我的测试中有一种方法可以为我生成适当的形状User-generate_test_user()

我想用Hypothesis编写一些测试来断言关于我的模型实例的各种属性。

我的第一个实现如下所示:

然而,这失败了,因为generate_test_user在导入时被调用,因此试图在 Django 迁移等运行之前创建一个模型。

制定策略以在正确的时间评估正确的事情/延迟评估just呼叫/类似情况的好方法是什么?

0 投票
1 回答
431 浏览

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

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

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

hypothesis然而,似乎多次只运行测试函数的主体,这意味着例如在各个运行之间没有事务回滚。这意味着当我的测试向数据库中插入一些东西时,我不能可靠地断言一些数据库条目,因为上一次运行的所有条目仍然会挂起。

我在这里遗漏了一些明显的东西还是这是预期的行为?如果是这样,有没有办法让假设已经完成的运行次数作为变量在测试中使用?

0 投票
1 回答
759 浏览

python - 使用hypothesis和py.test在python中测试复合策略,我必须一次测试一个吗?

我有 3 个文件 module.py,其中包含一个示例函数,用于测试输入是否为数字。我有一个名为 test_mymodule_long.py 的文件,它使用py.testhypothesis成功测试并传递了几种类型的输入。我使用的是 Python 3.6,但这无关紧要(如果不是,只需删除类型提示)。对于这个特定的功能,将它们分开对我没有帮助;如果假设找到一个边缘情况,我只想知道有问题的输入和引发的异常。因此,我想按照 test_mymodule_short.py 中的说明编写这个测试,但这不起作用。

我的问题是:有没有办法在假设中比在 test_mymodule_long.py 中更有效地编写策略?

这是每个文件中的代码:

请注意,我认为错误消息在这里并不重要,这更像是一种这不是你如何做的情况,我正在寻求关于是否有一种紧凑的方法来测试一个函数的建议多重假设策略。此外,我知道正确的 is_numeric 函数会以不同的方式编程(假设你真的需要这样的函数)。我也知道这里指出的测试还不够完整,无法知道它是否有效。这些只是让我的问题清楚的例子。

0 投票
1 回答
101 浏览

python - 在命令行上控制单个假设设置(使用 pytest 时)

我有一个同时使用 pytest 和假设的测试套件。我可以在命令行上指定应该使用哪个假设配置文件,就像这样

我正在努力寻找如何在不修改现有配置文件或创建新配置文件的情况下影响单个假设设置。我希望能够做与以下虚构示例等效的事情

假设 / pytest 组合是否提供了在命令行上修改单个假设设置的任何方法?

0 投票
1 回答
689 浏览

travis-ci - pytest 失败并出现 ModuleNotFoundError 和未使用插件的名称

我维护了一个开源库xarray,它使用 pytest 在 Travis-CI 上运行集成测试。我们使用堆栈 conda 安装科学 Python。

今天早些时候,我们的五个测试版本中有两个(Python 3.5 和 3.6,但不是 Python 2.7 或 3.4)开始无缘无故地失败。pytest 本身失败了,带有一个神秘的引用:

关于这件事,有几件事让我感到惊讶:

  1. 我们不使用假设或安装hypothesis.extra.pytestplugin。我不知道这是从哪里来的。
  2. 没有什么明显的变化会触发此错误。它首先出现在一行 doc change之后。安装的 Python 库,包括 conda 安装的特定二进制构建,似乎完全相同。(不过,如果您愿意,您可以diff自己构建输出。)

如果您对发生的事情有任何线索或猜测,我们将不胜感激!我什至不知道在堆栈中的哪个位置提交错误。

0 投票
2 回答
1008 浏览

python - 使用假设的python测试

如果要针对已知类型的输入参数进行测试,包假设提供了一组丰富的策略供使用。

考虑以下类及其使用假设的测试之一:

这会检查两件事:隐式地,如果提供的值是可接受的类型,并且显式地,self.double 中的计算是否正确。

这个测试类可以被认为是不完整的,至少因为除了 float 或 int 之外的任何输入类型都没有被检查:因为它需要另一个测试用例,直接检查断言错误,假设使用 AssertRaises。

我的问题是:你如何在假设检验哲学中做到这一点?

假设似乎没有“not_one_of”策略,也就是说,您可以定义类似“所有内置类型,除了这个和那个类型”。这只留下了定义“one_of”策略的可能性,其中包含一长串可供选择的类型。

注意:这整个情况让我想起了侏罗纪公园的根本问题,当他们检查是否有预期数量的恐龙时,却从未检查过是否有更多。所以我认为没有简单的解决方案,但我昨天首先尝试了假设,所以可能是我缺乏知识。

0 投票
4 回答
476 浏览

python - 假设(Python):省略参数

我有一个这样的函数(它实际上是一个类,但考虑到 Python 的鸭子类型,这无关紧要):

现在我想编写一个始终提供a但仅有时提供的假设测试b

我试过了

但似乎它strat.nothing()只是跳过了该测试运行(hypothesis.errors.FailedHealthCheck: It looks like your strategy is filtering out a lot of data.当我使用它作为唯一策略时b)。

我怎样才能有时只提供一个带有假设检验的论点?我是否需要编写两个测试,一个有b一个没有?

0 投票
1 回答
340 浏览

python - 带有可选参数的python假设测试

在我的项目中,我Hypothesis用来测试一个功能。被测函数接受一个强制参数调用stop和两个可选参数调用,分别为startstep。如果参数step为零,则被测代码应触发异常。

这是我的测试功能

我的问题:我还想模拟startandstep是可选的,因此这些参数中的一个或两个都设置为None. 如果不为每个代码变体重新创建专用测试函数,我该如何做到这一点?