在失败时重放prng状态的插件。

pytest-caprng的Python项目详细描述


PyPI versionPython versionsSee Build Status on Travis CISee Build Status on AppVeyor

在失败时重放prng状态的插件。


这是为什么?

测试随机函数具有挑战性。粗略地说,发生了两件事之一:

  1. 你学会忽略零星的失败。例如,如果你在某个随机函数上构造了一个binomial_test,它就有可能失败。知道了这一点,你就重新运行测试;它起作用;你得出结论说没有问题。通常,这是正确的结论。但是,一遍又一遍地重复这个模式会让你看不到真正错误的代码。这使得发现错误的可能性降低。这很糟糕。
  2. 你的猴子修补你的prng。通常,这意味着调度实现,注入确定性。但是,这需要知道测试函数的实现细节。而且,如果这种情况改变了,测试也需要改变。这很脆弱。这使得发现错误的可能性降低。这很糟糕。

这个插件是一个折衷方案,旨在消除(2)并降低(1)的流行率。它通过再现性为您的测试提供了一些确定度。如果随机测试失败,重新运行它将导致完全相同的失败

它是怎么工作的?

除非您有(很酷的)专用硬件,否则代码不会使用随机数。相反,它使用一个由伪随机数生成器(prng)产生的“足够随机”的确定的数字序列,每个prng都有一个内部状态。绘制样本时,状态将更改。如果将prng的状态重置回原始状态,然后再次采样,则采样将与第一个相同。这是确定性的。

这个插件利用了randomnp.random底层prng的决定论。在每个测试功能之前,cap rng[cap]表示p[rng]状态。如果测试失败,插件会将捕获的状态写入缓存。然后,当您重新运行测试时,插件将查看您的测试函数是否具有任何关联的、缓存的prng状态。如果是,它会将prng状态覆盖到prior以运行测试函数,previous reproducting the failing tests prior environment

安装

您可以通过以下方式安装“pytest caprng”:

$ pip install pytest-caprng

用法

对于基于random的状态捕获:

$ pytest --caprng-global-stdlib

对于np.random

$ pytest --caprng-global-np

您可能应该将选项添加到pytest.ini文件中:

[pytest] addopts = –caprng-global-stdlib –caprng-global-np

这样你就不会“错过”可复制的错误。

贡献

我们非常欢迎您的贡献。测试可以使用tox运行,请确保 在提交请求之前,覆盖范围至少保持不变。

许可证

“Pytest Caprng”是根据麻省理工学院许可证条款发行的免费开源软件

问题

如果您遇到任何问题,请提交一个问题与详细说明。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaFX JavaFX。打印印刷工的工作。createPrinterJob()在mac上始终为空   如何在JavaEE和Spring引导中重新加载属性?   java获得了特定的进程CPU使用率   java RDD之后的空文件是什么。保存ASTEXTFILE?   在pubQuery模板中定义表模式的java   java JMC飞行记录器不显示自定义方法   java如何在循环中存储用户以前的值?   安卓中的java转换时间(毫秒)   java自定义卡片视图形状   groovy如何为Java程序编写输入脚本   性能JMeter:java。网NoRouteToHostException:无法分配请求的地址(地址不可用)   java Java7垃圾收集器如何工作?   用java进行单元测试   java如何将因子代码转换为素数和复合标识符?