问题标签 [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 回答
177 浏览

python - 优化策略使用(数据生成)

我想为我的单元测试优化数据生成速度。似乎策略需要from_regexdictionaries长时间才能生成示例。

下面是我编写的示例,以尝试对示例生成进行基准测试:

test_integer()测试用作参考,因为它使用简单的策略。

因为我的一个项目中的一些长期运行的测试使用正则表达式来生成参数名称和字典来生成这些参数,所以我使用这些策略添加了两个测试。

test_composite()使用采用可选参数的复合策略。 test_standard()使用类似的策略,但它不是复合的。

下面是测试结果:

复合策略慢吗?

如何优化自定义策略?

0 投票
1 回答
719 浏览

python - 使用 pytest 和假设进行异常处理和测试

我正在为带有假设的统计分析编写测试。假设导致我ZeroDivisionError在我的代码中传递了非常稀疏的数据。所以我调整了我的代码来处理异常;就我而言,这意味着记录原因并重​​新引发异常。

我需要通过调用堆栈向上传递异常,因为顶级调用者需要知道存在异常,以便它可以将错误代码传递给外部调用者(REST API 请求)。

编辑:我也不能为 ; 分配一个合理的值val。本质上我需要一个直方图,当我从数据中计算一个合理的 bin 宽度时就会发生这种情况。显然,当数据稀疏时,这会失败。如果没有直方图,算法就无法继续进行。

现在我的问题是,在我的测试中,当我做这样的事情时:

hypothesis不断生成触发的失败示例,ZeroDivisionError我不知道如何忽略此异常。通常我会用 标记这样的测试pytest.mark.xfail(raises=ZeroDivisionError),但在这里我不能这样做,因为相同的测试通过了表现良好的输入。

像这样的东西是理想的:

  1. 对于大多数输入,像往常一样继续测试,但是
  2. 引发时ZeroDivisionError,将其作为预期失败跳过。

我怎么能做到这一点?我是否也需要try: ... except: ...在测试主体中添加一个?我需要在 except 块中做什么才能将其标记为预期失败?

编辑:为了解决@hoefling 的评论,分离出失败的案例将是理想的解决方案。但不幸的是,hypothesis没有给我足够的手柄来控制它。最多我可以控制生成数据的总数和限制(最小值,最大值)。然而,失败的案例分布范围很窄。我没有办法控制它。我想这就是假设的重点,也许我根本不应该为此使用假设。

这是我生成数据的方式(略微简化):

0 投票
1 回答
748 浏览

python - 如何在@given 中参数化假设策略

我正在测试一个 REST API,它可以处理不同的请求,例如,有日期的和无日期的。请求有一个名为 的字段request_type。我想知道在假设中编写测试的最佳方法是什么:

我可以写两个睾丸,一个是有日期的,一个是无日期的。

但是对于一个共同的属性,我可以写一个与pytest.mark.parametrize. 问题是请求策略如何req_type@given.

有没有办法像参数化@given(req=requests(req_type))?还是我应该随机生成带有日期和无日期的请求并通过测试?

0 投票
2 回答
169 浏览

python - 假设 - 在测试之间重用 @given

我已经使用hypothesis了一段时间了。我想知道如何重用@given parts.

我有一些像 20 行,我将整个@given部分复制到几个测试用例之上。

一个简单的测试示例

绕过重用@given块的最佳方法是什么?

0 投票
1 回答
148 浏览

python - 如何查看 Hypothesis Python 库的“Bundle”输出?(有状态测试)

使用假设库并执行有状态测试时,我如何查看或输出库正在我的代码上尝试的捆绑“服务”?

例子

问题是:如何打印/查看库生成的 Bundle“服务”变量?

0 投票
1 回答
386 浏览

pytest - 当假设产生片状测试错误时如何调试?

我正在使用假设 python 包进行状态测试。运行测试时出现以下错误:

我从类似的帖子中理解了片状错误的含义。我有一个第一次失败但第二次通过的测试。从日志中我可以理解,是哪个测试导致了这个失败。假设在整个测试运行期间尝试相同的测试序列 4 次,其中 2 次通过,2 次失败。

我已经在没有假设的情况下单独尝试了失败的测试,它没有失败。我试图了解导致片状错误的原因。它可能是假设中的错误,如下面的帖子所示:

Flaky: Hypothesis test 产生不可靠的结果是什么意思?

我该如何解决这个问题?请在链接中找到测试运行的日志文件: https ://github.com/aparnasbose/hypothesis/blob/master/flaky%20test

0 投票
2 回答
151 浏览

python - Pytest/Hypothesis 与预期的字符串不匹配

我正在测试我与 Sanic 一起使用的验证功能。

我正在针对浮点值对此进行测试,并使用假设来生成测试条件。

此测试失败:

打印语句如下所示:

为什么我的断言不匹配?琴弦在我看来是一样的。我假设这是由于浮点值,但在这种情况下,我如何正确匹配该值?

0 投票
2 回答
80 浏览

python - 对于假设策略,如何从 max_value 而不是 min_value 开始测试用例?

我是 Hypothesis 的新手,我想测试一个从 Hypothesis Strategy 获取整数输入的函数:

假设测试从 min_value 2 到 9 的函数。

有没有办法可以扭转这种情况?我希望测试用例以 t=9 而不是 t=2 开始。

0 投票
1 回答
128 浏览

python-hypothesis - 如何使用 python 假设创建复杂的数据结构

我正在尝试使用假设来生成具有复杂格式的文本策略。我不确定如何建立这种数据结构。

我尝试将各种元素构建为复合材料,然后将它们用作其他复合材料的策略。然而,列表策略中的元素参数需要一个 SearchStrategy 而不是我希望的复合。浏览文档我无法确定构建、映射或平面图在这种情况下是否有帮助。

我的(简化的)尝试如下。

0 投票
1 回答
132 浏览

python - 如何在 Python 假设状态测试中测量覆盖率?

我使用生成许多随机序列的假设状态测试来测试系统的某些功能。为了比较结果,我使用 Automat 库编写了一个模型,该库也是一个状态机。我想了解使用有状态测试用例获得的覆盖率。由于此测试处于集成级别,因此我不想找到代码覆盖率。模型覆盖率之类的东西可能有助于理解有状态测试用例覆盖模型的程度。

我的问题是:这看起来是个好主意吗?还是有更好的选择来从假设中获得测试用例的覆盖率?有人可以指导我正确的方向。