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

时间:2018-12-07 08:58:12

标签: python unit-testing pycharm

我来自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?

4 个答案:

答案 0 :(得分:2)

在PyCharm中,首先设置默认的测试运行器 enter image description here

现在,右键单击“测试”文件夹。应该有一个“运行py.test”(或类似的文件,取决于您选择的测试)选项。就是这样,仅此而已。

(编辑:这在Professional Edition中有效。我无法确认在Community Edition中是否有效)

答案 1 :(得分:2)

这对我有用:

  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脚本。将配置命名为“所有测试”。

答案 2 :(得分:1)

您可以使用

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

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

unittest document“测试发现”一章中的详细信息

答案 3 :(得分:0)

很遗憾,PyChorm不支持​​,而IntelliJ支持。因此,我使用了一个相当棘手的解决方法。我创建了一个“ all_tests”文件夹。然后,将所有模块的所有测试文件夹链接到该文件夹​​中。从这里开始,只需右键单击并运行所有测试即可。

请注意,Windows还支持名为mklink的符号链接,但是同时支持Windows和Linux并不容易。