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

时间:2011-06-18 15:37:12

标签: python pycharm pytest

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

据称,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并在编辑器窗口中右键单击,我会得到承诺的“创建< name>”菜单项:在test_sa中创建单元测试...'...,然后在test_sa中运行'单元测试......'“和在test_sa中调试'单元测试......'”。所以,这一切都与unittest框架有关; py.test没什么。

如果我尝试使用“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测试?

13 个答案:

答案 0 :(得分:203)

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

答案 1 :(得分:31)

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. 上设置勾号
  4. Run/Debug configuration清除所有以前存在的测试配置,否则将使用这些旧配置运行测试。
  5. 要设置一些默认的附加参数,请更新py.test默认配置。 Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments

答案 2 :(得分:17)

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

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

答案 3 :(得分:5)

记录不足以确定无疑。从默认值添加新配置后,您将处于运行" / Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py"脚本。它没有记录,并且有自己的命令行参数的想法。

你可以:

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

答案 4 :(得分:5)

这是我如何与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():
    print("hello pytest")
    assert True
  1. 使用常规运行命令运行它

答案 5 :(得分:3)

当我遇到同样的问题并找到解决方案时找到这个帖子 pycharm版本:2017.1.2 转到"偏好" - > "工具" - > " Python集成工具"并将右侧面板的默认测试运行器设置为py.test 解决我的问题

答案 6 :(得分:2)

我正在使用2018.2

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

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

我设置了Python解释器。

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

答案 7 :(得分:0)

使用一个特殊的Conda python设置,其中包括py.test的pip安装以及Specs addin(选项--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样式输出。我喜欢它!谢谢大家!

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

为您的项目启用Pytest

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

enter image description here

答案 10 :(得分:0)

在pycharm 2019.2中,您只需执行以下操作即可运行所有测试:

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

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

答案 11 :(得分:0)

打开首选项窗口(在Mac上为Command键+“,”):

Python preferences link

1。工具

2.Python集成工具

3。默认测试运行程序

python Default test runner

答案 12 :(得分:0)

PyCharm 文档:Last 自 2020 年 9 月起可用。

Run/Debug Configuration: pytest