在失败时重放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第三方库


热门话题
Spring 4升级后未加载java应用程序上下文   java Android 2.3.3 internet可以在我的Galaxy S上运行,但不能在我的Galaxy选项卡上运行?(许可?)   java通过不改变其原始位置对大小写字母进行排序   java Spring Boot一直在破坏我的电脑。。。sts的最佳配置是什么。Windows 10上的ini文件?   css Java Spring+引导问题   java Jackson将GeoJsonPoint序列化为纬度/经度   xml Java Transformer:如何将其结果生成OutputStream?   java如何更改字体、文本大小和设置文本位置?   在JavaSpringHibernate3.6.3中,如何告诉一个方法等待,直到获得锁,以及如何重试失败的事务?   java安卓服务代替线程   Java Swing使用鼠标移动JFrame