【问题标题】:How do I exit from pdb debugging when running hypothesis?运行假设时如何退出 pdb 调试?
【发布时间】:2021-03-19 04:45:07
【问题描述】:

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

每次我希望能够退出测试时,我通常都会打开系统监视器并终止 pytest 进程。

我希望有更好的方法。

问题可以通过下面的sn-p重现-

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()

我正在使用带有假设 5.37.0 的 python 3.8

【问题讨论】:

  • 你想输入测试用例一次然后跳过还是什么?
  • @AzatIbrakov 是的,基本上。
  • 你能分享一个精确的复制脚本吗?当我尝试使用内置的 breakpoint() 进行复制时,我得到了 n 逐步执行的预期行为,c 继续下一次迭代,并且 ctrl-c 完全退出调试器和 pytest 会话。
  • 这太令人惊讶了。我假设这是标准行为。您能否确认我更新问题的代码是否存在问题? @ZacHatfield-Dodds
  • 啊,但是!我可以在 Ubuntu 下重现您的问题,而不是在 Windows 下。这很奇怪。

标签: python unit-testing debugging pytest python-hypothesis


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多