运行假设时如何退出 pdb 调试?

问题描述

我喜欢在我的单元测试中使用 hypothesis。我也喜欢在出现问题时使用 pdb 进行调试。但是尝试将这两个一起使用可能会非常烦人。如果我在使用 pytest <PATH-TO-FILE> -s 的假设运行的文件中设置断点,它将按预期在断点处停止,我可以进行分析。但是在我完成后,我希望能够退出测试。但是,如果我从断点内部执行 ctrl+c ,则测试不会退出,它只会转到下一个假设测试用例。我必须继续这样做,直到假设完成并生成所有测试用例。

每次我想退出测试时,我通常都会打开系统监视器并杀死 pytest 进程。

我希望有更好的方法

该问题可以通过以下代码段重现 -

import hypothesis
from hypothesis import strategies as st

@hypothesis.given(st.integers())
def test_some_function(some_arg):
    breakpoint()
    print(some_arg)

test_some_function()

我使用的是 python 3.8,假设为 5.37.0

解决方法

这在 Linux 下发生,但在 Windows 下不是,目前尚不清楚这是否是 Hypothesis 或 Pdb 中的错误,或者“只是”功能组合的不良行为。

作为a workaround,您可以import os; os._exit(0)跳过所有清理逻辑并立即退出。

更好的解决方案是在使用调试器时禁用多错误报告和收缩阶段,以便在第一次失败后立即停止生成示例。您可以创建一个用于调试器的 settings profile,然后通过 --hypothesis-profile=pytest 参数激活它。