Pytest Flaky:假设检验产生不可靠结果意味着什么?

Pytest Flaky:假设检验产生不可靠结果意味着什么?,pytest,python-hypothesis,Pytest,Python Hypothesis,我正在使用假设python包进行测试 我得到以下错误: 古怪的:假设检验会产生不可靠的结果:在第一次通话中被伪造,但在随后的一次通话中没有 据我所知,测试工作正常 我该如何解决这个问题呢?这或多或少意味着它所说的:您有一个测试,第一次失败,但第二次使用相同的示例重新运行时成功。这可能是一个假设错误,但通常不是。最常见的原因是您的测试取决于某些外部状态,例如,如果您使用的是系统随机数生成器而不是假设提供的生成器,或者您的测试创建了一些文件,并且只有在测试开始时文件不存在时才会失败。第二个最常见的原

我正在使用假设python包进行测试

我得到以下错误:

古怪的:假设检验会产生不可靠的结果:在第一次通话中被伪造,但在随后的一次通话中没有

据我所知,测试工作正常


我该如何解决这个问题呢?

这或多或少意味着它所说的:您有一个测试,第一次失败,但第二次使用相同的示例重新运行时成功。这可能是一个假设错误,但通常不是。最常见的原因是您的测试取决于某些外部状态,例如,如果您使用的是系统随机数生成器而不是假设提供的生成器,或者您的测试创建了一些文件,并且只有在测试开始时文件不存在时才会失败。第二个最常见的原因是,您的失败是一个递归错误,而在一个函数调用级别触发它的示例在另一个级别没有触发


你没有提供足够的信息来说明实际发生了什么,所以很难提供比这更具体的建议。如果您运行的是最新版本的假设(例如1.9.0当然可以),您应该得到关于发生了什么的非常详细的诊断-它会告诉您最初的异常是什么,并且它会报告传入的值在调用之间是否发生了变化。

有一点我没有提到过很多,这可能是一种相对较新的行为,即你可能希望提高考试的截止日期。根据我的经验,如果一个测试用例由于错过了最后期限而失败,而第二个测试用例通过了,那么您会将其视为“不稳定的”测试失败

@假设设置(截止日期=500)

对于我来说,很难找到一些我个人能够完全理解的关于这种行为的适当文档,但这似乎为我解决了问题。

测试是如何失败的?测试中并没有失败的断言。再次向我的测试提供相同的参数,当第二次提供这些参数时,在测试中采用不同的路径。但它不会做出任何失败的断言。任何异常都会导致失败,而不仅仅是断言。就像我说的:应该向您显示导致原始失败的异常的堆栈跟踪。如果不提供任何相关信息,很难诊断发生了什么。没有打印堆栈跟踪。显示的唯一错误是片状错误。可能是在出现所述错误时会显示一些附加信息。我的测试对于输入不是幂等的,并且在第二次显示相同的输入时工作方式不同。也许这和它有关。那么是的,这就是正在发生的事情。就像我说的。此错误是由运行两次时未执行相同操作的测试引起的。如果你没有得到堆栈跟踪,那么你运行的是一个旧版本的假设。这是一个很好的观点,但我似乎记得它实际上提到了最后期限失败,作为失败的原因。