VSCode pytest测试发现失败

时间:2019-04-24 20:17:15

标签: python visual-studio-code pytest vscode-settings

Pytest测试发现失败。 UI指出:

Test discovery error, please check the configuration settings for the tests

输出窗口指出:

Test Discovery failed: 
Error: Traceback (most recent call last):
  File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\run_adapter.py", line 16, in <module>
    main(tool, cmd, subargs, toolargs)
  File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\adapter\__main__.py", line 90, in main
    parents, result = run(toolargs, **subargs)
  File "C:\Users\mikep\.vscode\extensions\ms-python.python-2019.4.11987\pythonFiles\testing_tools\adapter\pytest.py", line 43, in discover
    raise Exception('pytest discovery failed (exit code {})'.format(ec))
Exception: pytest discovery failed (exit code 3)

这是我的设置:

{
    "python.pythonPath": ".venv\\Scripts\\python.exe",
    "python.testing.pyTestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pyTestEnabled": true
}

我可以通过FWIW从命令行成功运行pytest。

14 个答案:

答案 0 :(得分:6)

我只是想在这里添加我的答案,因为这很可能会影响使用.env文件作为项目环境设置的人,因为它是12因子应用程序的常见配置。

我的示例假设您使用pipenv进行虚拟环境管理,并且在项目的根目录中有一个.env文件。

我的vscode工作区设置json文件如下所示。在这里对我来说至关重要的是"python.envFile": "${workspaceFolder}/.env",

{
    "python.pythonPath": ".venv/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.pycodestyleEnabled": false,
    "python.linting.flake8Enabled": false,
    "python.linting.pylintPath": ".venv/bin/pylint",
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
    ],
    "python.formatting.provider": "black",
    "python.formatting.blackArgs": [
        "--line-length",
        "100"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true,
    "python.testing.pytestPath": ".venv/bin/pytest",
    "python.envFile": "${workspaceFolder}/.env",
    "python.testing.pytestArgs": [
        "--no-cov"
    ],
}

我希望这可以节省我花时间弄清楚这个问题的时间。

答案 1 :(得分:3)

在我的情况下,vscode无法发现测试的问题是在setup.cfg中启用了coverage模块(或者可能是pytest.ini),即

addopts= --cov <path> -ra

这导致测试发现由于覆盖率低而失败。解决方案是从配置文件中删除该行。

此外,如documentation中的建议:

您还可以通过手动设置测试,方法是将以下设置中的一个(也只有一个)设置为true:python.testing.unittestEnabledpython.testing.pytestEnabledpython.testing.nosetestsEnabled >

答案 2 :(得分:2)

这不是一个完整的答案,因为我不知道为什么会这样,并且可能与您的问题无关,这取决于您的测试结构。

我通过将一个__init__.py文件放在测试文件夹中解决了这个问题

E.G。:


├───.vscode
│       settings.json
│
├───app
│       myapp.py
│
└───tests
        test_myapp.py
        __init__.py

这几天前没有这个就可以工作,但是python扩展最近已更新。我不确定这是否是预期的行为或现在如何进行发现的副作用

https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md
Use Python code for discovery of tests when using pytest. (#4795)

答案 3 :(得分:2)

我通过将pytest升级到最新版本:4.4.1和“ pip install --upgrade pytest”解决了该问题。我显然正在运行旧版本3.4.2

答案 4 :(得分:2)

在创建具有导入错误的测试后,我花了很长时间尝试破解此无用的错误。在进行任何更深入的故障排除之前,请验证您的测试套件是否可以实际执行。

pytest --collect-only是您的朋友。

答案 5 :(得分:2)

在开始测试发现之前,请检查python.testing.cwd正确指向您的测试目录,并将您的python.testing.pytestEnabled设置为true

一旦正确设置了这些要求,请运行测试发现及其输出(请参见 OUTPUT 窗口)。您应该会看到类似这样的内容:

python $HOME/.vscode/extensions/ms-python.python-$VERSION/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir $ROOT_DIR_OF_YOUR_PROJECT -s --cache-clear
Test Discovery failed: 
Error: ============================= test session starts ==============================
<SETTINGS RELATED TO YOUR MACHINE, PYTHON VERSION, PYTEST VERSION,...>
collected N items / M errors
...

重要的是在此处突出显示最后一行:collected N items / M errors。以下各行将包含有关pytest发现的测试的信息。因此,您的测试是可发现的,但存在与正确执行相关的错误。

以下几行将包含错误,在大多数情况下,这些错误与错误的导入有关。

检查以前是否已下载所有依赖项。如果您正在使用特定版本的依赖项(在requirements.txt文件中,您的文件类似your_package == X.Y.Z),请确保它是您需要的正确版本。

答案 6 :(得分:1)

这个错误太令人沮丧了.. 在我的情况下,通过将 python.pythonPath 中的 settings.json 参数(在项目根目录下的 .vscode 文件夹中找到)修改为我在终端中使用 which python 获得的路径修复了错误(例如/usr/local/var/pyenv/shims/python

我在 python3.9 中使用 pyenv,我之前说的错误是:

<块引用>

错误:进程返回错误:/Users/"user-name"/.pyenv/shims/python: 第 21 行:/usr/local/Cellar/pyenv/1.2.23/libexec/pyenv:没有这样的文件或 目录

在ChildProcess。 (/用户/“用户名”/.vscode/extensions/littlefoxteam.vscode-python-test-adapter-0.6.8/out/src/processRunner.js:35:36) 在 Object.onceWrapper (events.js:422:26) 在 ChildProcess.emit (events.js:315:20) at mayClose (internal/child_process.js:1021:16) 在 Process.ChildProcess._handle.oneexit (内部/child_process.js:286:5)

答案 7 :(得分:0)

看着https://docs.pytest.org/en/latest/usage.html#possible-exit-codes,似乎pytest本身已经因为某种内部错误而失败了。

答案 8 :(得分:0)

似乎是最新版本的VS Code Python扩展中的错误。我遇到了同样的问题,然后将Python扩展降级为 2019.3.6558 ,然后它再次起作用。因此,我们应该转到VS Code扩展列表,选择Python扩展,然后从该扩展的设置中“安装其他版本...”。

我希望这也对您有用。

答案 9 :(得分:0)

我遇到了同样的问题,并将其跟踪到我的NuGet文件中。从该文件中删除大部分pytest.ini即可解决此问题。

答案 10 :(得分:0)

如果您在@JsonProperty("NAME")上遇到麻烦,那么我将在发现测试部分中苦苦挣扎。

在vscode中阅读一些open issue (other)时,我发现了使用@JsonAutoDetect(fieldVisibility = Visibility.ANY) data class Vac ( @JsonProperty("I") var I : List<Double>, var v: List<Double> ) 扩展名的解决方法

market_place_link

扩展作用就像一种魅力。 (并解决我的发现问题)

答案 11 :(得分:0)

我在设置中搜索了“python”并找到了这个:

enter image description here

切换到 pytest 自动检测我的测试:

enter image description here

答案 12 :(得分:0)

我遇到了这个问题,并为此挣扎了几个小时。我认为每个其他平台配置都有一个特殊的分辨率。我的平台是:

  • VSCode:1.55.0 (Ubuntu)
  • Pytest:6.2.3
  • MS Python 扩展 (ms-python.python 2021.3.680753044)
  • 用于 Visual Studio Code 的 Python 测试资源管理器 (littlefoxteam.vscode-python-test-adapter - 0.6.7)

最糟糕的是该工具本身没有标准输出(至少我知道或可以在互联网上轻松找到)。

最后,问题出在

--no-cov

VSCode 测试资源管理器工具(我从互联网上的某个页面复制)无法识别的参数,并且该错误由扩展 littlefoxteam.vscode-python-test-adapter 和它可以帮助您找到损坏的地方。

答案 13 :(得分:0)

就我而言,每次 flake8 linter 报告错误时都会出现相同的问题。即使是一个错误也足以使 VS Code 测试发现失败。 因此,修复方法是禁用 linter 或修复 linter 错误。 我使用 here 描述的设置。