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

How do I exit from pdb debugging when running hypothesis?

我喜欢使用 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 中的错误,或者 'just' 功能组合的不良行为。

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

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