我想开始为我的 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 并在编辑器窗口中单击鼠标右键,我会得到承诺的“创建
如果我尝试显示“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 测试?
请转到文件|设置 |工具 | Python 集成工具并将默认测试运行程序更改为 py.test。然后你会得到 py.test 选项来创建测试而不是 unittest 一个。
PyCharm 2017.3
首选项 -> 工具 -> Python 集成工具 - 选择 py.test 作为默认测试运行程序。如果您使用 Django Preference -> Languages&Frameworks -> Django - 勾选 Do not use Django Test runner 从运行/调试配置中清除所有以前存在的测试配置,否则将使用那些旧配置运行测试。要设置一些默认的附加参数,请更新 py.test 默认配置。运行/调试配置 -> 默认值 -> Python 测试 -> py.test -> 附加参数
New => Python File
时,Kind:
下拉菜单仅提供:Python 文件、单元测试、Python存根,而不是 Pytest。我已经查看了上面线程中提到的所有位置。我错过了什么?
我认为您需要使用工具栏上的运行/调试配置项。单击它并“编辑配置”(或者使用菜单项“运行”->“编辑配置”)。在左窗格的“默认值”部分中有一个“py.test”项目,我认为这是你想要的。
我还发现手册与 UI 不匹配。希望我已经正确理解了这个问题,这会有所帮助。
Target
为 Script ath
并将其指向我的测试文件夹的根目录
以下是我如何使用 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
在 pycharm 2019.2 中,您可以简单地执行此操作来运行所有测试:
运行 > 编辑配置 > 添加 pytest 设置选项,如下面的屏幕截图所示单击调试(或使用例如热键 Shift+Alt+F9 运行 pytest)
有关 pytest 与 pycharm 的更高集成度,请参阅https://www.jetbrains.com/help/pycharm/pytest.html
可以肯定的是,它的记录很差。从默认设置添加新配置后,您将进入运行“/Applications/PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py”脚本的领域。它没有记录在案,并且对命令行参数有自己的想法。
你可以:
尝试一下,反转脚本,看看你是否能以某种方式让 py.test 接受参数。它可能会起作用;对我来说,前半个小时没有。只需从控制台运行“py.test *.py”。
奇怪的是,您会发现很难找到任何讨论,因为 JetBrains 在用自己的页面轰炸 Google 算法方面做得很好。
当我遇到同样的问题并找到解决方案 pycharm version:2017.1.2 时找到此线程 转到“首选项”->“工具”->“Python 集成工具”并从右侧面板将默认测试运行器设置为 py.test解决我的问题
我正在使用 2018.2
我运行 -> 编辑配置...然后单击模式对话框左上角的 +。选择“python 测试”-> py.test 然后我给它起一个名字,比如“All test with py.test”
我选择目标:模块名称并放入我的测试所在的模块(对我来说是“测试”)或我所有代码所在的模块,如果我的测试与我的代码混合在一起。这让我绊倒了。
我设置了 Python 解释器。
我将工作目录设置为项目目录。
为您的项目启用 Pytest
打开设置/首选项 |工具 | Python 集成工具设置对话框,如选择您的测试框架中所述。在默认测试运行器字段中选择 pytest。单击确定以保存设置。
https://i.stack.imgur.com/Cyy8k.png
打开首选项窗口(Mac 上的 Command 键 + ","):
https://i.stack.imgur.com/BOl0r.png
1.工具
2.Python集成工具
3.默认测试运行器
https://i.stack.imgur.com/ICoUh.png
使用一个特殊的 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
在 2018.3 中,它似乎会自动检测到我正在使用 pytest,这很好,但它仍然不允许从项目的顶层运行。我必须为每个 tests
目录单独运行 pytest
。
但是,我发现我可以选择其中一种配置并手动编辑它以在项目的根目录下运行,并且这很有效。我必须在“配置”下拉菜单中手动选择它 - 无法右键单击“项目”窗格中的根文件夹。但至少它允许我一次运行所有测试。
File | Settings | Tools | Python Integrated Tools
仅在项目设置中可用,而不是 PyCharm 5 中的默认设置。