ChatGPT解决这个技术问题 Extra ChatGPT

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

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

PyCharm 据称 supports py.test 在其测试运行程序中。您应该能够 create a run/debug configuration 运行您的测试,而 PyCharm 据称有一个 "create configuration" dialog box specifically for py.test。但这就是他们关于该主题的文档的完整范围,我在任何地方都找不到这个所谓的对话框。

如果我右键单击项目工具窗口中的目录,我会在 supposed 看到“创建 <name>”菜单项,但唯一以“创建”开头的菜单项是“创建运行配置”。好的,也许文档是错误的,“创建运行配置”听起来很有希望。不幸的是,其子菜单中仅有的两个项目是“C:\mypath... 中的单元测试”和“C:\mypath... 中的 Doctests”,这两者都不适用——我既没有使用 unittest,也没有使用 doctest。 py.test 没有菜单项。

如果我打开我的 test_sample.py 并在编辑器窗口中单击鼠标右键,我会得到承诺的“创建 ”菜单项:有“在 test_sa 中创建 'Unittests ...'...”,然后是“运行'test_sa 中的单元测试 ...'”和“调试 'test_sa 中的单元测试 ...'”。再说一遍,这一切都特定于 unittest 框架; py.test 没有。

如果我尝试显示“unittest”的菜单项,我会看到一个对话框,其中包含“名称”、“类型”选项、“测试”组框以及“文件夹”和“模式”以及“脚本”和“类” " 和 "Function" 等。这听起来与记录为添加 configuration for Python Unit Test 的对话框完全相同,而不像应该显示在configuration for py.test 对话框。对话框中没有任何内容可以切换我要添加的测试框架。

我在带有 Python 3.1.3 和 pytest 2.0.3 的 Windows 上使用 PyCharm 1.5.2。我可以从命令行成功地在我的测试中运行 py.test,所以它不是像 pytest 没有正确安装这样简单的事情。

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


S
Saeed

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


哈!不知道我是怎么错过的。但是,它只工作了一半:如果我右键单击项目工具窗口中的文件夹,它会给我一个创建 doctests 的选项,而不是 py.tests。 (我会写一个错误报告。)但是如果我在编辑器中右键单击然后将“脚本:”更改为目录名称,它确实有效。
还记得将您的源目录标记为“源根目录”:jetbrains.com/pycharm/webhelp/content-root.html
有没有办法为整个项目(或所有项目)而不是每个模块设置它?
似乎 File | Settings | Tools | Python Integrated Tools 仅在项目设置中可用,而不是 PyCharm 5 中的默认设置。
配置完成后,您如何实际运行测试?
J
Jean-François Corbett

PyCharm 2017.3

首选项 -> 工具 -> Python 集成工具 - 选择 py.test 作为默认测试运行程序。如果您使用 Django Preference -> Languages&Frameworks -> Django - 勾选 Do not use Django Test runner 从运行/调试配置中清除所有以前存在的测试配置,否则将使用那些旧配置运行测试。要设置一些默认的附加参数,请更新 py.test 默认配置。运行/调试配置 -> 默认值 -> Python 测试 -> py.test -> 附加参数


在 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 中,“Defaults”被称为“Templates”
第3步是巨大的。我不知道这些配置会在我不做任何事情的情况下自动创建,并且它们位于与 pytest 不同的子标题中,因此它们的优先级不是很明显。
对我来说,第 2 点解决了这个问题。其他所有东西都设置好了(甚至一些测试默认由 pytest 运行,其他的不是),直到我勾选了该复选框。
S
Scott Griffiths

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

我还发现手册与 UI 不匹配。希望我已经正确理解了这个问题,这会有所帮助。


“Defaults > py.test”页面实际上并没有给我任何创建配置的方法。但是,如果我进入“编辑配置”对话框,单击“+”工具栏按钮,选择“py.test”,并将“工作目录”设置为包含我的测试的目录,这确实创建了一个可以运行我的测试的配置。所以 +1 将我指向该程序的一个有用部分。不过,我将接受@yole 的答案,因为我认为将默认值更改为 py.test 是一个更好的解决方案——它应该让我只运行当前文件,诸如此类。
@JoeWhite 请务必将其添加为答案,因为它很有帮助
在编辑配置窗口上,选择我的 pytest 配置后,我还必须选择 TargetScript ath 并将其指向我的测试文件夹的根目录
这是更好的方法,因为它打开了其他功能以及传递命令行参数等。
B
Benjamin Crouzier

以下是我如何使用 pytest 3.7.2(通过 pip 安装)和 pycharms 2017.3

去编辑配置

https://i.stack.imgur.com/JRMAv.png

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

https://i.stack.imgur.com/UukKz.png

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

https://i.stack.imgur.com/ckURm.png

我的测试文件夹看起来像这样。这就在我的项目(my_project/tests)的根目录下。

https://i.stack.imgur.com/2ZuR0.png

我的 foobar_test.py 文件:(不需要导入):

def test_foobar():
    print("hello pytest")
    assert True

使用正常的运行命令运行它

https://i.stack.imgur.com/2tsrS.png


是否有可能仅从当前文件运行测试?我只发现每次打开其他文件时都需要更改配置设置中的文件名
@algot我不知道在我的头上。看看这个:jetbrains.com/help/pycharm/performing-tests.html 和这个:jetbrains.com/pycharm/guide/tips/run-single-test
在 PyCharm 2020.1.2 Pro 中,第 3 步截图中的 Target 按钮被命名为:“Module name”、“Script path”、“Costum”。选择“模块名称”有效,其他一切都与显示的相同。
g
gebbissimo

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

运行 > 编辑配置 > 添加 pytest 设置选项,如下面的屏幕截图所示单击调试(或使用例如热键 Shift+Alt+F9 运行 pytest)

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


这帮助我修复了 PycharmCE(V2020.3)
C
Charles Merriam

可以肯定的是,它的记录很差。从默认设置添加新配置后,您将进入运行“/Applications/PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py”脚本的领域。它没有记录在案,并且对命令行参数有自己的想法。

你可以:

尝试一下,反转脚本,看看你是否能以某种方式让 py.test 接受参数。它可能会起作用;对我来说,前半个小时没有。只需从控制台运行“py.test *.py”。

奇怪的是,您会发现很难找到任何讨论,因为 JetBrains 在用自己的页面轰炸 Google 算法方面做得很好。


j
jacobcan118

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


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

我正在使用 2018.2

我运行 -> 编辑配置...然后单击模式对话框左上角的 +。选择“python 测试”-> py.test 然后我给它起一个名字,比如“All test with py.test”

我选择目标:模块名称并放入我的测试所在的模块(对我来说是“测试”)或我所有代码所在的模块,如果我的测试与我的代码混合在一起。这让我绊倒了。

我设置了 Python 解释器。

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


M
Milo Chen

为您的项目启用 Pytest

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

https://i.stack.imgur.com/Cyy8k.png


A
Aviram Fireberger

打开首选项窗口(Mac 上的 Command 键 + ","):

https://i.stack.imgur.com/BOl0r.png

1.工具

2.Python集成工具

3.默认测试运行器

https://i.stack.imgur.com/ICoUh.png


请注意,您的屏幕截图选择了 Unitests,而问题的主题是 pytest。这可能会给初学者带来困惑。
A
AnneTheAgile

使用一个特殊的 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


s
sfjac

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

但是,我发现我可以选择其中一种配置并手动编辑它以在项目的根目录下运行,并且这很有效。我必须在“配置”下拉菜单中手动选择它 - 无法右键单击“项目”窗格中的根文件夹。但至少它允许我一次运行所有测试。


尝试编辑配置 -> 编辑配置模板 -> pytest -> 将工作目录设置为项目根目录
m
mon

有一个 PyCharm 文档:Run/Debug Configuration: pytest 自 2020 年 9 月起可用。

https://i.stack.imgur.com/HnYxg.png