VS Code 找不到 pytest 测试

VS Code not finding pytest tests

我在 vs-code 中设置了 PyTest,但是即使 运行 命令行中的 pytest 工作正常,也能找到 none 个测试。

(我正在使用 MiniConda 和 Python 3.6.6 虚拟环境在 Win10 上开发 Django 应用程序。VS 代码已完全更新,我有 Python 和 [=29 的调试器=] 已安装扩展)

Pytest.ini:

[pytest]
DJANGO_SETTINGS_MODULE = callsign.settings
python_files = tests.py test_*.py *_tests.py

vs-code 工作区设置:

{
    "folders": [
        {
            "path": "."
        }
    ],
    "settings": {
        "python.pythonPath": "C:\ProgramData\Miniconda3\envs\callsign\python.exe",
        "python.unitTest.unittestEnabled": false,
        "python.unitTest.nosetestsEnabled": false,
        "python.unitTest.pyTestEnabled": true,
        "python.unitTest.pyTestArgs": ["--rootdir=.\callsign", "--verbose"]
    }
}

最后,VS 代码中 Python 测试日志的输出:

============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.1.1, py-1.7.0, pluggy-0.8.1
Django settings: callsign.settings (from ini file)
rootdir: c:\Users\benhe\Projects\CallsignCopilot\callsign, inifile: pytest.ini
plugins: django-3.4.5
collected 23 items
<Package c:\Users\benhe\Projects\CallsignCopilot\callsign\transcription>
  <Module test_utils.py>
    <Function test_n_digits>
    <Function test_n_alpha>
    <Function test_n_hex>
    <Function test_n_digits_in_range>
    <Function test_v1_audiofilename>
    <Function test_v2_audiofilename>
    <Function test_v1_bad_int_filename>
    <Function test_v1_bad_non_int_filename>
    <Function test_bad_format>
    <Function test_no_format>
    <Function test_too_many_segments>
    <Function test_too_few_segments>
    <Function test_good_v2_filename>
    <Function test_bad_year_v2_filename>
    <Function test_bad_month_v2_filename>
    <Function test_bad_day_v2_filename>
    <Function test_bad_date_v2_filename>
    <Function test_bad_short_serial_v2_filename>
    <Function test_bad_long_serial_v2_filename>
    <Function test_good_v3_filename>
    <Function test_good_lowercase_block_v3_filename>
    <Function test_bad_non_alpha_block_v3_filename>
    <Function test_real_filenames>

======================== no tests ran in 1.12 seconds =========================

我是否遗漏了获取 vs-code 以查找测试的任何步骤?

编辑:我在阅读 issue 3911 后降级到 Pytest 4.0.1,测试发现现在可以工作了。


我也是。当我吹走 .pytest_cache 并重新运行 Python: Discover Unit Tests 时,我看到新生成的 .pytest_cache/v/cache/nodeids 包含所有测试,但我仍然收到抱怨 No tests discovered.[=19 的对话框=]

  • Python 3.7.2
  • macOS 10.13.6
  • VS 代码 1.30.2
  • Python 扩展 2018.12.1
  • Pytest 4.1.0

.vscode/settings.json:

{
    "python.linting.enabled": false,
    "python.unitTest.unittestEnabled": false,
    "python.unitTest.nosetestsEnabled": false,
    "python.unitTest.pyTestEnabled": true,
    "python.pythonPath": "venv3/bin/python"
}

测试位于名为 test 的顶级子目录中。 运行 pytest 手动工作。

如果有人遇到这个 post-2020,vscode-python 存储库中的 this issue 救了我的命。基本上,只需执行以下操作:

  1. 卸载 Python 扩展
  2. 从您的 ~/.vscode 文件夹中删除包含扩展名的文件(我的看起来像 ms-python.python-[YEAR].[MONTH].[VERSION]
  3. 重新安装扩展程序

工作得很好。

我的 Python 插件和 Test Explorer 工作正常。

在我的例子中,命名 class 而没有 test_.py 是问题所在。换句话说,命名测试文件而不以 "test_" 开头,而不是 "tests_",这样浏览器就看不到问题。例如:test_.py 有效,但 tests_.py12345abcde.py 无效。

如果 vscode 未能发现测试,要检查的另一件事是确保它不会因为 coverage module being enabled. In my case the test cases were being discovered correctly but the discovery eventually kept failing due to low test coverage, as described . So first, make sure that the tests could actually be collected by pytest as suggested :

而这样做
pytest --collect-only

然后确保您没有强制进行覆盖检查(例如在 setup.cfg 中),例如

addopts= --cov <path> -ra

2021 年 9 月,通过将 VS Code Python 扩展从版本 2021.9.1191016588 降级到版本 v2021.8.1159798656,我能够让 VS code 再次找到测试目录。要降级,请右键单击该扩展程序并单击“安装另一个版本...”

以下步骤对我有用(假设在 Visual Studio 代码中安装了最新的 PyTest):

  1. 确保没有错误(Visual Studio代码左下角)
  2. 在 Visual Studio 文件菜单中选择代码:文件 > 关闭文件夹(即关闭当前项目文件夹)并关闭 Visual Studio 代码。
  3. 重新打开 Visual Studio 代码并选择:文件 > 打开文件夹(重新打开包含您的 project/test 文件的文件夹)。
  4. 选择测试,应该可以从这里看到测试...

VScode需要指定python配置:

  1. 通过 Ctrl + shift + p
  2. 打开命令面板
  3. 然后写这个>python: configure tests然后按照程序说明

注意:在执行前面的步骤

之前,您可能需要(大多数情况下不需要)先执行

一件显而易见的事吸引了我...

测试文件夹层次结构需要每个文件夹中有 __init__.py 个文件。

我重构了我的测试,引入了一个额外的文件夹层,但忘记添加 __init__.py 个文件。
命令行没有抱怨,但 vscode 显示没有找到测试