如何配置 PyCharm 以运行 py.test 测试?
Posted
技术标签:
【中文标题】如何配置 PyCharm 以运行 py.test 测试?【英文标题】:How do I configure PyCharm to run py.test tests? 【发布时间】:2011-09-17 19:57:09 【问题描述】:我想开始为我的 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 会看到“创建”菜单项,但唯一以“创建”开头的菜单项是“创建运行配置” .好的,也许文档是错误的,“创建运行配置”听起来很有希望。不幸的是,其子菜单中仅有的两个项目是“C:\mypath... 中的单元测试”和“C:\mypath... 中的 Doctests”,这两者都不适用——我既没有使用 unittest,也没有使用 doctest。 py.test 没有菜单项。
如果我打开我的 test_sample.py 并在编辑器窗口中单击鼠标右键,我会得到承诺的“创建
如果我尝试显示“unittest”的菜单项,我会看到一个对话框,其中包含“名称”、“类型”选项、“测试”组框以及“文件夹”、“模式”和“脚本”和“类”和“功能”等。这听起来与添加configuration for Python Unit Test的对话框完全一样,而不是应该显示的“名称”和“测试运行”和“关键字”选项在configuration for py.test 对话框中。对话框中没有任何内容可以切换我要添加的测试框架。
我在 Windows 上使用 PyCharm 1.5.2 和 Python 3.1.3 和 pytest 2.0.3。我可以从命令行成功地在我的测试中运行py.test
,所以这不是像pytest没有正确安装这样简单的事情。
如何配置 PyCharm 以运行我的 py.test 测试?
【问题讨论】:
【参考方案1】:请转到文件| 设置 | 工具 | Python Integrated Tools 并将默认测试运行器更改为 py.test。然后你会得到 py.test 选项来创建测试而不是 unittest 。
【讨论】:
哈!不知道我是怎么错过的。但是,它只工作了一半:如果我右键单击项目工具窗口中的文件夹,它会给我一个创建 doctests 的选项,而不是 py.tests。 (我会写一个错误报告。)但是如果我在编辑器中右键单击然后将“脚本:”更改为目录名称,它确实有效。 还记得将您的源目录标记为“源根目录”:jetbrains.com/pycharm/webhelp/content-root.html 有没有办法为整个项目(或所有项目)而不是每个模块设置这个? 看来File | Settings | Tools | Python Integrated Tools
仅在项目设置中可用,而不是 PyCharm 5 中的默认设置。
配置完成后,您如何实际运行测试?【参考方案2】:
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 默认配置。 Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
【讨论】:
在 PyCharm 2017.3.2 中,即使我将 py.test 设置为默认值,当我在“项目”面板中右键单击项目并选择New => Python File
时,Kind:
下拉菜单仅提供:Python 文件、单元测试、Python 存根,而不是 Pytest。我已经查看了上面线程中提到的所有位置。我错过了什么?
Python 文件、单元测试、Python stub - 它们是 python 文件,带有一些预定义的数据,您可以添加自己的,阅读此主题jetbrains.com/help/pycharm/…。但这不会影响运行 py.test 测试,您可以只创建一个 python 文件,它会工作。在本主题中,我们将讨论如何配置此功能 jetbrains.com/help/pycharm/running-tests.html 以运行 py.test。
在最新的 PyCharm 中,“Defaults”被称为“Templates”
第 3 步非常庞大。我不知道这些配置会在我不做任何事情的情况下自动创建,并且它们位于与 pytest 不同的子标题中,因此它们的优先级不是很明显。
对我来说第 2 点解决了这个问题。其他所有东西都设置好了(甚至一些测试默认由 pytest 运行,其他的不是),直到我勾选了该复选框。【参考方案3】:
我认为您需要使用工具栏上的运行/调试配置项。单击它并“编辑配置”(或者使用菜单项“运行”->“编辑配置”)。在左窗格的“默认值”部分有一个“py.test”项,我认为这是您想要的。
我还发现手册与用户界面不匹配。希望我已经正确理解了这个问题,这会有所帮助。
【讨论】:
“默认值 > py.test”页面实际上并没有给我任何创建配置的方法。但是,如果我进入“编辑配置”对话框,单击“+”工具栏按钮,选择“py.test”,并将“工作目录”设置为包含我的测试的目录,这确实创建了一个可以运行我的测试的配置。所以 +1 将我指向该程序的一个有用部分。不过,我将接受@yole 的答案,因为我认为将默认值更改为 py.test 是一个更好的解决方案——它应该让我只运行当前文件,以及类似的东西。 @JoeWhite 请务必将其添加为答案,因为它很有帮助 在编辑配置窗口中,选择我的 pytest 配置后,我还必须选择Target
为 Script ath
并将其指向我的测试文件夹的根目录
这是更好的方法,因为它打开了其他功能以及传递命令行参数等。【参考方案4】:
这是我如何使用 pytest 3.7.2
(通过 pip 安装)和 pycharms 2017.3
:
-
转到
edit configurations
-
添加新的运行配置并选择
py.test
-
在运行配置详细信息中,您需要将
target
=python
和下面未命名的字段设置为tests
。看起来这是您的测试文件夹的名称。不太确定强硬。我还推荐使用-s
参数,这样如果您调试测试,控制台就会正常运行。如果没有参数 pytest 会捕获输出并使调试控制台出错。
-
我的测试文件夹看起来像这样。它就在我项目的根目录下方 (
my_project/tests
)。
-
我的
foobar_test.py
文件:(无需导入):
-
用正常的运行命令运行它
【讨论】:
是否有可能只从当前文件运行测试?我只发现每次打开其他文件时都需要更改配置设置中的文件名 @algot 我不知道在我的头顶上。看看这个:jetbrains.com/help/pycharm/performing-tests.html 和这个:jetbrains.com/pycharm/guide/tips/run-single-test 在 PyCharm 2020.1.2 Pro 中,第 3 步屏幕截图中的 Target 按钮命名为:“模块名称”、“脚本路径”、“Costum”。选择“模块名称”有效,其他一切都与显示的相同。【参考方案5】:在 pycharm 2019.2 中,您可以简单地执行此操作来运行所有测试:
-
运行 > 编辑配置 > 添加 pytest
如下图所示设置选项
单击 Debug(或使用例如热键 Shift+Alt+F9 运行 pytest)
关于 pytest 与 pycharm 的更高集成度,请参阅https://www.jetbrains.com/help/pycharm/pytest.html
【讨论】:
这帮助我修复了 PycharmCE(V2020.3)【参考方案6】:可以肯定的是,它的记录很差。从默认设置添加新配置后,您将进入运行“/Applications/PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py”脚本的领域。它没有记录在案,并且对命令行参数有自己的想法。
你可以:
-
试一试,反转脚本,看看是否可以让 py.test 接受参数。它可能会起作用;对我来说,前半小时没有。
只需从控制台运行“py.test *.py”即可。
奇怪的是,您会发现很难找到任何讨论,因为 JetBrains 在用自己的页面轰炸 Google 算法方面做得很好。
【讨论】:
【参考方案7】:当我遇到同样的问题并找到解决方案时找到这个帖子 pycharm版本:2017.1.2 转到“首选项”->“工具”->“Python 集成工具”并从右侧面板将默认测试运行器设置为 py.test 解决我的问题
【讨论】:
它会起作用,但是你必须在项目窗口中右键单击测试脚本文件名。如果您右键单击同一测试脚本的文件编辑器区域,不幸的是它仍然显示旧的默认工具(Unittests)。这很烦人,因为我无法指定要测试的单个函数。【参考方案8】:我用的是2018.2
我运行 -> 编辑配置... 然后单击模态对话框左上角的 +。 选择“python 测试”-> py.test 然后我给它起一个名字,比如“All test with py.test”
我选择目标:模块名称 并放入我的测试所在的模块(对我来说就是“测试”)或我所有代码所在的模块,如果我的测试与我的代码混合在一起的话。这把我绊倒了。
我设置了 Python 解释器。
我将工作目录设置为项目目录。
【讨论】:
【参考方案9】:为您的项目启用 Pytest
-
打开设置/首选项|工具 | Python 集成工具 设置对话框,如选择您的测试框架中所述。
在默认测试运行器字段中选择pytest。
单击“确定”保存设置。
【讨论】:
【参考方案10】:打开首选项窗口(Mac 上的 Command 键 + ","):
1.工具
2.Python集成工具
3.默认测试运行器
【讨论】:
请注意您的屏幕截图选择了 Unitests,而问题的主题是 pytest。这可能会给初学者带来困惑。【参考方案11】:使用一个特殊的 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 风格的输出。我喜欢它!谢谢大家!
附言Jetbrains 关于运行/调试配置的文档在这里:https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test
【讨论】:
【参考方案12】:在 2018.3 中,它似乎自动检测到我正在使用 pytest,这很好,但它仍然不允许从项目的顶层运行。我必须为每个tests
目录单独运行pytest
。
但是,我发现我可以选择其中一种配置并手动编辑它以在项目的根目录下运行,并且这很有效。我必须在“配置”下拉菜单中手动选择它 - 无法右键单击“项目”窗格中的根文件夹。但至少它允许我一次运行所有测试。
【讨论】:
尝试编辑配置 -> 编辑配置模板 -> pytest -> 将工作目录设置为项目根【参考方案13】:有一个 PyCharm 文档:Run/Debug Configuration: pytest 自 2020 年 9 月起可用。
【讨论】:
以上是关于如何配置 PyCharm 以运行 py.test 测试?的主要内容,如果未能解决你的问题,请参考以下文章