如何让Pycharm从tests文件夹递归地运行所有python单元测试

ecbunoof  于 2023-08-05  发布在  PyCharm
关注(0)|答案(6)|浏览(151)

我来自Java背景,所以我将我的单元测试组织成独立的并行测试层次结构,反映了我的主项目的结构。我使用PyCharm代替Intellij或Eclipse。在这两个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?

bhmjp9jg

bhmjp9jg1#

只是在这里张贴一个答案,因为我被困在这个一段时间...这里的所有其他答案都围绕着这个主题跳舞,但你的情况的解决方案相对简单:
当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文件)

afdcj2ne

afdcj2ne2#

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

现在右键单击“test”文件夹。应该有一个“runpy.test”(或类似的,取决于您选择的测试)选项。就这样,没什么需要的了。
(EDIT:这在专业版中有效。我不能确认这是否适用于社区版或不)

um6iljoc

um6iljoc3#

这就是我的工作:
1.在父目录中创建一个新的shell脚本。说“run_tests. sh”。
1.编写shell代码,在任何你想要的地方运行测试(正如YuhaoQI建议的那样)。如果要运行项目中的所有测试:

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

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

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


1.在pycharm configurations下拉菜单中点击“Edit Configurations”并添加您刚刚创建的shell脚本。将配置命名为“All tests”。

368yc8dk

368yc8dk4#

真的很遗憾,PyChorm不支持这一点,而IntelliJ支持。所以我用了一个相当古怪的方法。我创建了一个“all_tests”文件夹。然后我把我所有模块的所有测试文件夹符号链接到这个文件夹中。从这里它是直接向前的,只需右键单击并运行所有测试。
注意,windows也支持符号链接,它被称为mklink,但是要同时支持windows和linux并不容易。

vc6uscn9

vc6uscn95#

  • 打开设置。
  • 导航到项目设置。
  • 选择Project Structure
  • 找到您的顶级test文件夹并选择命中。单击窗口顶部栏中的Tests选项,将其标记为Tests

现在,您应该可以通过右键单击子文件夹(在tests文件夹中的任何级别)来运行所有测试。

t2a7ltrp

t2a7ltrp6#

您可以使用

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

字符串
或者是

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


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

相关问题