播种试验和随机性再现装置
pytest-rng的Python项目详细描述
pytest rng
pytest-rng为 确保测试中的“随机性”是可重复的 从一次跑步到下一次跑步。 它还允许在请求时更改所有测试的种子, 帮助确保测试成功不依赖于 特定随机数种子。
- 使用rngfixture获得预种子随机数生成器(rng) 这会暴露numpy的~numpy.random.mtrand.randomstate接口。
- 使用seedfixture获取整数种子 可以用来初始化你自己的RNG。
下面的示例打印相同的四个随机数 每次测试运行时。
importnumpyasnpdeftest_rectification(rng,seed):print(rng.uniform(-1,1,size=3))print(seed)
要使用这些固定装置,请使用
pip install pytest-rng
安装后,您可以像使用任何其他设备一样使用这些设备: 将rng或seed添加到测试函数或类的参数中。
种子产生
对于seedfixture,我们通过执行以下操作生成种子:
- 连接测试的nodeid和salt值(如果提供)。
- 散列该字符串以生成整数种子。
对于rngfixture,我们还将字符串"rng"添加到salt 在生成上述种子之前的值。 种子用于实例化一个~numpy.random.mtrand.randomstate, 它被归还。
注意
我们在salt中添加"rng",以确保随机数 使用rngfixture时不同 当手动实例化^{tt14}时$ 使用seed设备。
盐
salt是添加到测试的^{tt7}中的字符串$ 以便为所有测试更改种子。 定期更换种子有利于确保 您的测试套件对不同的种子是健壮的。
salt值可以在配置文件中指定 例如setup.cfg或pytest.ini。
[tool:pytest]rng_salt=v0.3.0
也可以通过命令行指定salt值。
pytest --rng-salt "v0.4.0"
通过命令行传递的salt值优先 超过配置文件中设置的值 这样你就可以在飞行中改变种子。
看到全部 documentation 更多细节。
发布历史记录
1.0.0(2019年8月8日)
初版pytest-rng! 感谢所有的贡献者让这成为可能!