【问题标题】:How to make Pycharm run all python unit tests recursively from tests folder如何让 Pycharm 从测试文件夹递归运行所有 python 单元测试
【发布时间】:2021-11-23 05:34:33
【问题描述】:

我具有 Java 背景,因此我将单元测试组织成独立的并行测试层次结构,以反映我的主要项目的结构。我正在使用 PyCharm 代替 Intellij 或 Eclipse。在这两个 I IDE 中,我可以选择任何被测包并在此命名空间下递归运行所有单元测试。

测试结构

+ tests
    + billing
        +  supplier
            + ClassName_tests.py - file
                - TestClassName  - class
                    - test_one() - functions
                    - test_two() - functions
    + config
        ...
    + invoicing
        ...

这可以通过 Python 和/或 PyCharm 实现吗?目前我需要单独运行每个命名空间/模块的测试我是否必须在 PyCharm 或 Python 中定义一些东西。

我已阅读并尝试过此设置,但它运行所选文件夹中的所有测试,而不是递归。 How to force Pycharm to run all unit tests?

【问题讨论】:

  • 用递归,你的意思是“运行'test'目录中的所有测试”吗?
  • ... 及以下。递归下降目录并迭代整个树的每个目录中的每个测试。

标签: python unit-testing pycharm


【解决方案1】:

只是在这里发布一个答案,因为我被困了一段时间...... 这里的所有其他答案都围绕着这个主题跳舞,但您的案例的解决方案相对简单:

当 Pycharm 在目录中发现测试时,它会将子目录视为模块来发现测试。

这意味着这些文件夹需要包含一个__init__.py 文件才能被发现。

换句话说:

你的例子:

+ tests
    + billing
        +  supplier
            + ClassName_tests.py - file
           
    + ... (omitted the rest for brevity)

应该变成:

+ tests
    + billing
        - __init__.py
        +  supplier
            - __init__.py
            - ClassName_tests.py - file
           
    + ...

之后,右键单击“tests”目录并在其中运行所有测试应该会运行所有测试,包括子文件夹中的测试,但仅适用于可被视为模块的子文件夹(例如,包含 __init__.py 文件)

【讨论】:

  • 这应该是公认的答案。
【解决方案2】:

在 PyCharm 中,首先设置您的默认测试运行器

现在右键单击您的“测试”文件夹。应该有一个“运行 py.test”(或类似的,取决于您选择的测试)选项。就是这样,不需要任何东西。

(编辑:这适用于专业版。我无法确认这是否适用于社区版)

【讨论】:

  • 这就是我正在做的,它只在所选文件夹中运行测试,它不会递归地下降目录。 /tests 实际上是空的,但包含 5 个测试目录,每个目录还包含几个子文件夹。
  • 你的测试文件叫什么?据我所知,pycharm 使用一种非常简单的方法来查找测试。类似于查找名称中带有“test”或“Test”的文件/函数
  • 我已将部分文件夹结构以及示例名称添加到问题中。
  • 尝试将 ClassName_tests.py 重命名为“test_ClassName.py”
【解决方案3】:

这对我有用:

  1. 在您的父目录中创建一个新的 shell 脚本。说“run_tests.sh”。

  2. 编写 shell 代码以在任何你想要的地方运行测试(正如 YuhaoQI 建议的那样)。如果要运行项目中的所有测试:

    python -m unittest discover -s ./ -p "test_*.py"
    

    或者如果你想在一个目录“tests”中运行所有测试:

    python -m unittest discover -s tests -p "test_*.py"
    
  3. 在 pycharm 配置下拉菜单中单击“编辑配置”并添加您刚刚创建的 shell 脚本。将配置命名为“所有测试”。

【讨论】:

  • 这也是我正在做的事情,但这并没有在底部为您提供漂亮的测试控制台,您可以在其中看到并最终重新启动失败的测试等。
【解决方案4】:

PyChorm 不支持这一点,而 IntelliJ 支持,真的很可惜。所以我使用了一个相当老套的解决方法。我创建了一个“all_tests”文件夹。然后我将我所有模块的所有测试文件夹符号链接到这个文件夹中。从这里开始很简单,只需右键单击并运行所有测试。

请注意,windows 也支持符号链接,称为mklink,但同时支持 windows 和 linux 并不容易。

【讨论】:

    【解决方案5】:

    你可以使用

    python -m unittest discover -s project_directory -p "*_test.py"
    

    python -m unittest discover project_directory "*_test.py"
    

    详情见unittest document“测试发现”一章

    【讨论】:

    • 在 Python 控制台中失败并出现错误:文件 "",第 1 行 python -m unittest discover -s project_directory -p "*_test.py" ^ SyntaxError: invalid syntax
    • 这些代码应该在终端执行,你需要稍微改变一下。
    • 这不是 PyCharm 的正确答案。您应该在终端中运行您的测试!
    猜你喜欢
    • 2018-06-06
    • 2019-01-15
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2013-11-22
    • 2014-04-08
    相关资源
    最近更新 更多