关于python:如何配置PyCharm来运行py.test测试?

How do I configure PyCharm to run py.test tests?

我想开始为我的python代码编写单元测试,py.test框架听起来比python捆绑的unittest更好。所以我在我的项目中添加了一个"tests"目录,并在其中添加了test_sample.py。现在我想配置pycharm来运行"tests"目录中的所有测试。

据称,pycharm在其测试运行程序中支持py.test。您应该能够创建一个运行/调试配置来运行您的测试,而PyCharm据称有一个专门针对py.test的"创建配置"对话框。但这是他们关于这个主题的完整文档,我在任何地方都找不到这个所谓的对话框。

如果我右键单击项目工具窗口中的目录,我应该看到一个"create"菜单项,但唯一以"create"开头的菜单项是"create run configuration"。好吧,也许文档是错误的,"创建运行配置"听起来很有希望。不幸的是,它的子菜单中只有两项是"UnitTests in C:MyPath…"和"Doctests in C:MyPath…",两者都不适用——我既不使用UnitTest也不使用Doctest。py.test没有菜单项。

如果我打开测试sample.py并在编辑器窗口中单击鼠标右键,我会得到承诺的"create"菜单项:有"create"unittests in test_sa…"…",然后是"run"unittests in test_sa…"",以及"debug"unittests in test_sa…""。所以,这一切都是特定于UnitTest框架的;对于py.test来说,没有什么。

如果我确实尝试过菜单项"UnitTest",我会得到一个对话框,其中包含"name"、"type"、"test s"组框,其中包含"folder"和"pattern"、"script"、"class"和"function"等选项。这听起来与记录为添加Python单元测试配置的对话框完全相同,而不是"name"、"test to run"和"keywor"ds"选项,该选项应显示在"py.test配置"对话框中。对话框中没有任何内容可以切换我要添加的测试框架。

我正在Windows上使用pycharm 1.5.2和pytest 3.1.3。我可以从命令行成功地在我的测试上运行py.test,所以这不是简单的事情,比如pytest没有正确安装。

如何配置pycharm以运行py.test测试?


请转到文件设置工具Python集成工具,并将默认测试运行程序更改为py.test。然后您将得到py.test选项来创建测试,而不是unittest选项。


Pycharm 2017.3版

  • Preference -> Tools -> Python integrated Tools—选择py.test作为Default test runner
  • 如果您使用django Preference -> Languages&Frameworks -> Django,请在Do not use Django Test runner上打勾。
  • Run/Debug configuration中清除所有以前存在的测试配置,否则将使用这些旧配置运行测试。
  • 要设置一些默认附加参数,请更新py.test默认配置。埃多克斯1〔6〕

  • 我认为您需要使用工具栏上的运行/调试配置项。单击它并"编辑配置"(或者使用菜单项"运行"->"编辑配置")。在左窗格的"默认值"部分有一个"py.test"项,我认为这是您想要的。

    我还发现手册与此的用户界面不匹配。希望我能正确理解这个问题,这有帮助。


    以下是我如何使其与pytest EDOCX1(通过pip安装)和pycharms 2017.3一起工作:

  • edit configurations
  • 添加新的运行配置并选择py.test
  • 氧化镁

  • 在运行配置详细信息中,需要将target=python和下面未命名的字段设置为tests。看起来这是测试文件夹的名称。不太确定太难。我还建议使用-s参数,这样,如果您调试测试,控制台将正常工作。如果没有参数,pytest将捕获输出并使调试控制台出错。
  • 氧化镁

  • 我的测试文件夹看起来像那样。这就在我的项目(my_project/tests)的根之下。
  • 氧化镁

  • 我的foobar_test.py文件:(不需要导入):
  • 1
    2
    3
    def test_foobar():
        print("hello pytest")
        assert True
  • 用正常运行命令运行
  • 氧化镁


    这是不太可靠的记录。一旦从默认值中添加新的配置,您将进入运行"/applications/pycharm ce.app/contents/helpers/pycharm/pytestranner.py"脚本的领域。它没有文档记录,并且对命令行参数有自己的想法。

    你可以:

  • 试着四处游玩,反转脚本,看看你是否能以某种方式让py.test接受参数。它可能会起作用,前半个小时我没有。
  • 只需从控制台运行"py.test*.py"。
  • 奇怪的是,你会发现很难找到任何讨论,因为JetBrains在用自己的页面轰炸谷歌算法方面做得很好。


    当我碰到同一个问题并找到解决方案时找到这个线索Pycharm版本:2017.1.2转到"首选项"->"工具"->"Python集成工具",并将右侧面板中的默认测试运行程序设置为py.test。解决我的问题


    我用的是2018.2

    我确实运行->编辑配置…然后单击模态对话框左上角的+键。选择"python tests"->py.test然后我给它起了个名字,比如"用py.test进行所有测试"

    我选择目标:模块名称把我的测试放在模块中(对我来说就是"测试"),或者如果我的测试和我的代码混合在一起,把我所有的代码放在模块中。这让我很困惑。

    我设置了python解释器。

    我将工作目录设置为项目目录。


    对于2018.3,它似乎自动检测到我正在使用Pytest,这很好,但它仍然不允许从项目的顶层运行。我必须为每个tests目录分别运行pytest

    但是,我发现我可以选择其中一个配置,并手动编辑它以在项目的根目录下运行,这是有效的。我必须在"配置"下拉列表中手动选择它-不能右键单击"项目"窗格中的根文件夹。但至少它允许我一次运行所有测试。


    有了一个特殊的conda python安装程序,其中包括pip install for py.test以及specs-addin(option--spec)(对于rspec-like-nice-test-summary-language)的用法,我不得不这样做;

    1.编辑默认py.test以包含选项=--spec,这意味着使用插件:https://github.com/pchomik/pytest-spec

    2.使用py.test创建新的测试配置。将其python解释器更改为使用~/anaconda/envs/您选择的解释器,例如py27。

    3.删除"UnitTests"测试配置。

    4.现在默认的测试配置是py.test,带有我可爱的rspec样式输出。我喜欢它!谢谢大家!

    p.s.jetbrains的运行/调试配置文档如下:https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?搜索=PY.测试