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


162

我想开始为我的Python代码编写单元测试,而py.test框架听起来比Python捆绑的unittest更好。因此,我向项目添加了“ tests”目录,并向其添加了test_sample.py。现在,我想配置PyCharm以运行“ tests”目录中的所有测试。

据称,PyCharm 在其测试运行程序支持py.test。您应该能够创建运行/调试配置来运行测试,并且PyCharm据称具有专门用于py.test“创建配置”对话框。但这是他们关于该主题的文档的完整范围,我无法在任何地方找到这个所谓的对话框。

如果在“项目”工具窗口中右键单击目录,则应该看到“创建<名称>”菜单项,但是唯一以“创建”开头的菜单项是“创建运行配置”。好的,也许文档只是错误的,“创建运行配置”听起来确实很有希望。不幸的是,其子菜单中仅有的两项是“ C:\ mypath ...中的Unittests”和“ C:\ mypath ...中的Doctests”,都不适用-我既未使用unittest也未使用doctest。py.test没有菜单项。

如果我打开test_sample.py并在编辑器窗口中单击鼠标右键,则会得到承诺的“创建<名称>”菜单项:有“在test_sa中创建'Unittests ...'...”,然后是“运行” “ test_sa中的单元测试...”和“调试test_sa中的单元测试...”。同样,这都是单元测试框架所特有的。py.test没有。

如果我确实尝试显示“ unittest”的菜单项,则会出现一个对话框,其中包含“名称”,“类型”,带有“文件夹”,“模式”,“脚本”和“类”的“测试”组框”和“函数”等。这听起来与为Python单元测试添加配置的对话框所记录的内容完全不同,而不像应该显示的“名称”和“运行测试”以及“关键字”选项一样在py.test对话框的配置中。对话框中没有任何内容可以切换我要添加的测试框架。

我在Windows上使用Python 3.1.3和pytest 2.0.3的PyCharm 1.5.2。我可以从命令行成功运行py.test测试,所以这不是像pytest未正确安装那样的简单操作。

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

Answers:


228

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


哈哈!不知道我怎么想的。但是,它只能成功一半:如果我在“项目”工具窗口中的文件夹上单击鼠标右键,它将为我提供创建doctests的选项,而不是py.tests。(我将编写一个错误报告。)但是,如果我在编辑器中单击鼠标右键,然后将“ Script:”更改为目录名称,它确实可以工作。
乔·怀特

3
还记得标记您的源目录为“来源根”:jetbrains.com/pycharm/webhelp/content-root.html
英迪

1
有没有一种方法可以针对整个项目(或所有项目)而不是针对每个模块进行设置?
OrangeDog

1
似乎File | Settings | Tools | Python Integrated Tools仅在项目设置中可用,而在PyCharm 5中不是默认设置
。– killthrush

2
配置完成后,如何实际运行测试?
克里斯·安德森

51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools-选择py.testDefault test runner
  2. 如果您使用Django- Preference -> Languages&Frameworks -> Django勾选Do not use Django Test runner
  3. 从中清除所有以前存在的测试配置Run/Debug configuration,否则将使用这些较旧的配置运行测试。
  4. 要设置一些默认的其他参数,请更新py.test默认配置。 Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments

2
在PyCharm 2017.3.2中,即使在将py.test设置为默认值之后,当我在“项目”面板中右键单击该项目并选择时New => Python File,该Kind:下拉列表也仅提供:Python文件,单元测试,Python存根而不是Pytest。我已经查看了上面线程中提到的所有位置。我想念什么?
汤姆·贝克

Python文件,单元测试,Python存根-它们是python文件,带有一些预定义的数据,您可以添加自己的文件,请阅读jetbrains.com/help/pycharm/…主题。但这不会影响py.test测试的运行,您只需创建一个python文件即可使用。在本主题中,我们将讨论如何配置此功能jetbrains.com/help/pycharm/running-tests.html 以运行py.test。
谢尔盖·库布拉克

在最新的PyCharm中,“默认值”称为“模板”
AgDude19年

19

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

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


4
实际上,“默认> py.test”页面没有给我任何创建配置的方法。但是,如果我转到“编辑配置”对话框,单击“ +”工具栏按钮,选择“ py.test”,然后将“工作目录”设置为包含我的测试的目录,则确实创建了可以运行我的测试的配置。因此,+ 1是让我指向程序的有用部分。不过,我会给@yole接受的答案,因为我认为将默认值更改为py.test是一个更好的解决方案-它应该让我仅运行当前文件,以及类似的事情。
乔·怀特

@JoeWhite请务必将其添加为答案,因为它很有帮助
Hariom Singh

在“编辑配置”窗口中,选择我的pytest配置后,我还必须选择Target将其Script ath指向我的测试文件夹的根目录
RAbraham

这是更好的方法,因为它开辟了其他的功能,以及像通过命令行参数等
CHIRAG纳亚克

13

这是我使它与pytest 3.7.2(通过pip安装)和pycharms一起工作的方式2017.3

  1. edit configurations

  1. 添加一个新的运行配置并选择 py.test

  1. 在运行配置详细信息中,您需要将target= python和下面的未命名字段设置为tests。看起来这是您的测试文件夹的名称。不太确定强硬。我还建议使用该-s参数,以便在调试测试时,控制台将正常运行。没有参数pytest会捕获输出,并使调试控制台出错。

  1. 我的测试文件夹如下所示。这刚好在我的项目(my_project/tests)的根目录之下。

  1. 我的foobar_test.py文件:(无需导入):
def test_foobar():
    打印(“ Hello pytest”)
    断言为真
  1. 使用常规运行命令运行它


是否有可能仅从当前文件运行测试?我只发现每次打开其他文件时都需要在配置设置中更改文件名
algot


5

可以肯定地说,它的文献不多。从默认设置添加新配置后,您将可以运行“ / Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py”脚本。它没有记录,并且有自己的命令行参数构想。

您可以:

  1. 尝试玩一下,反转脚本,看看是否可以使py.test接受参数。它可能会起作用;上半个小时对我来说不是。
  2. 只需从控制台运行“ py.test * .py”即可。

奇怪的是,您很难找到任何讨论,因为JetBrains擅长用自己的页面轰炸Google算法。


3

当我遇到相同的问题并找到解决方案pycharm版本时找到此线程:2017.1.2转到“首选项”->“工具”->“ Python集成工具”,然后从右侧面板中将默认测试运行器设置为py.test解决我的问题


它将起作用,但是随后您必须在“项目”窗口中右键单击测试脚本文件名。如果右键单击同一测试脚本的文件编辑器区域,则不幸的是,它仍显示旧的默认工具(Unittests)。这很烦人,因为我无法指定要测试的单个功能。
张宏宇

3

在pycharm 2019.2中,您可以简单地执行以下操作以运行所有测试:

  1. 运行>编辑配置>添加pytest
  2. 设置选项,如以下屏幕截图所示 配置屏幕截图
  3. 单击调试(或使用快捷键Shift + Alt + F9运行pytest)

有关pytest与pycharm的更高集成,请参阅https://www.jetbrains.com/help/pycharm/pytest.html


2

我正在使用2018.2

我运行->编辑配置...然后单击模式对话框左上方的+。选择“ python测试”-> py.test然后给它一个名称,例如“使用py.test进行所有测试”

我选择“目标:模块名称”,然后将测试放在其中的模块(对我来说就是“测试”),或者将测试与代码混合在一起的地方放在所有代码所在的模块中。这让我不寒而栗。

我设置了Python解释器。

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


0

使用特殊的Conda python安装程序,其中包括py.test的pip安装以及Specs插件的使用(选项--spec)(对于Rspec来说,就像不错的测试摘要语言一样),我必须这样做;

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

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

3.删除“ unittests”测试配置。

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

ps Jetbrains关于运行/调试配置的文档在这里:https ://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search = py.test


0

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

但是,我发现我可以选择一种配置,然后手动对其进行编辑以在项目的根目录下运行,并且可以正常工作。我必须在“配置”下拉列表中手动选择它-不能右键单击“项目”窗格中的根文件夹。但是至少它允许我同时运行所有测试。


0

为您的项目启用Pytest

  1. 打开设置/首选项| 工具| 如选择测试框架中所述的Python Integrated Tools设置对话框。
  2. 默认测试运行器字段中,选择pytest
  3. 单击确定以保存设置。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.