问题描述
这可能是不可能的,但我只是想知道是否有任何工具可以在我运行 Python 脚本时帮助检测非确定性行为。也许调试器中有一些奇特的选项?我想我在想象,从理论上讲,可以逐条比较堆栈指令或相同代码的两次后续运行之间的其他内容,从而找出任何分歧的开始。
我意识到很多事情都在幕后发生,所以这可能很难要求调试器或任何工具......
本质上我的问题是我的测试偶尔会失败,几乎可以肯定是因为在某处代码意外地依赖于迭代字典的输出顺序,或者一些实际上无法保证顺序的事情。我只是想要一个工具来帮助我找到这类问题的根源:)
以下问题类似,但没有太多关于如何真正以自动化或通用方式处理此问题的建议:Testing for non-deterministic behavior of python function
解决方法
我不知道有什么方法可以自动执行此操作,但我建议您在测试失败时启动调试器,然后自动运行(隔夜?)直到失败。然后,您可以检查变量,看看是否有任何突出之处。如果您使用的是 pytest,使用 return httpClient(url).then(({ headers,json }) => {
if (!headers.has('x-total-count')) {
throw new Error(
'The X-Total-Count header is missing in the HTTP Response...'
);
}
return {
data: json,total: parseInt(
headers.get('x-total-count').split('/').pop(),10
),}
标志运行将在失败时启动调试器。
您也可以考虑使用 Hypothesis 来运行生成测试用例。
您还可以考虑一遍又一遍地运行测试,收集每次运行的输出(成功或失败)。当您有代表性样本时,请比较两者,特别是运行的测试的顺序!