【问题标题】:pytest: how to override command line option in python program?pytest:如何覆盖 python 程序中的命令行选项?
【发布时间】:2019-10-14 22:53:50
【问题描述】:

默认情况下,pytest 会大量增加错误回溯并将一些信息打印到 sysout 流中,这些信息是多余的:考虑到我使用的是 PyCharm,看到代码 sn-p 脱离上下文确实令人困惑,虽然它们已经可用在 IDE 和调试界面中。

因此,我打算将 pytest traceback 永久设置为 native。但是,根据文档,这样做的唯一方法是在启动测试运行程序时添加额外的命令行参数:

-tb=native

我想让我的测试始终使用本机回溯,无论它是如何运行的。是否可以使用 TestCase API 来做到这一点?

非常感谢您的帮助。

【问题讨论】:

    标签: python python-3.x pytest


    【解决方案1】:

    您可以将此选项添加到 pytest.ini 文件中,它会被 pytest 自动选择。对于您的具体情况,具有以下内容的 pytest.ini 应该可以工作:

    [pytest]
    addopts = --tb=native
    

    注意tb 的双连字符;我正在使用 pytest 4.6.4,这就是它对我的工作方式。

    另外,通过修改 PYTEST_ADDOPTS 环境变量,请参阅 pytest docs 以获得另一种选择。

    【讨论】:

    • 我认为 --tb=native 也可以添加到 Run/Debug ConfigurationsAdditional Arguments 字段中。
    【解决方案2】:

    我不确定您如何使用pytest 来做到这一点,我也不熟悉这个包。话虽如此,您始终可以创建一个 bash 函数 来完成此操作:

    function pytest() {
      pytest -tb=native "$@"
    }
    

    "$@" 符号会将pyt 之后的所有 参数传递给函数(有点像python 中的*args),所以运行pyt arg1 arg2 ... argn 将与运行相同 pytest -tb=native arg1 arg2 ... argn

    如果您不熟悉创建 bash 快捷方式,请参阅 this question

    更新

    我误解并认为 OP 从 cli 调用 pytest。如果您直接覆盖 pytest,而不是创建 pyt 函数,PyCharm 可能 调用它的 bash 版本(虽然我不太确定)。

    话虽如此,yaniv's 的答案似乎比这个更好,如果它有效的话。

    【讨论】:

    • 我认为您错过了在他的情况下 pytest 被 PyCharm 调用的观点,因此不能选择运行 Bash 函数。
    • @tmt 谢谢我没有意识到这一点。如果 PyCharm 直接调用 pytest(我对此表示怀疑),那么我的更新版本可能会起作用,否则这是没用的。
    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2020-12-20
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多