VS Code not finding pytest tests

Question:

I have PyTest setup in vs-code but none of the tests are being found even though running pytest from the command line works fine.

(I’m developing a Django app on Win10 using MiniConda and a Python 3.6.6 virtual env. VS Code is fully updated and I have the Python and Debugger for Chrome extensions installed)

Pytest.ini:

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

vs-code workspace settings:

{
    "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"]
    }
}

Finally, the output from the Python Test Log inside VS code:

============================= 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:UsersbenheProjectsCallsignCopilotcallsign, inifile: pytest.ini
plugins: django-3.4.5
collected 23 items
<Package c:UsersbenheProjectsCallsignCopilotcallsigntranscription>
  <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 =========================

Am I missing any steps to get vs-code to find the tests?

Asked By: Ben

||

Answers:

EDIT: I downgraded to Pytest 4.0.1 after reading issue 3911 and Test Discovery now works.


Me too. When I blow away .pytest_cache and rerun Python: Discover Unit Tests, I see that the freshly generated .pytest_cache/v/cache/nodeids contains all the tests, but I still get the dialog complaining about No tests discovered.

  • Python 3.7.2
  • macOS 10.13.6
  • VS Code 1.30.2
  • Python Extension 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"
}

Tests are in a top-level subdirectory called test. Running pytest manually works.

Answered By: George V. Reilly

If anyone comes across this post-2020, this issue in the vscode-python repo saved my life. Basically, just do the following:

  1. Uninstall the Python extension
  2. Delete the file that contains the extension from your ~/.vscode folder (mine looked like ms-python.python-[YEAR].[MONTH].[VERSION])
  3. Reinstall the extension

Worked like a charm.

Answered By: Arcsector

My Python plugin and Test Explorer works just fine.

In my case naming the class without test_.py was the issue. In other words, naming the test file without it starting with "test_", not "tests_", makes it so the explorer does not see the issue. Ex: test_.py works but tests_.py, 12345abcde.py don’t work.

Answered By: Kako

Another thing to check, if vscode fails to discover the tests, is to make sure it doesn’t do so because of the 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 here. So first, make sure that the tests could actually be collected by pytest as suggested here:

pytest --collect-only

and then make sure you’re not forcing coverage check (e.g. in setup.cfg) with e.g.

addopts= --cov <path> -ra
Answered By: Tomasz Bartkowiak

In September 2021, I was able to get VS code to find the test directory again by downgrading the VS Code Python extension from version 2021.9.1191016588 to version v2021.8.1159798656. To downgrade, right-click the extension and click "Install another version…"

Answered By: Matt

The following steps worked for me (assuming latest PyTest installed in Visual Studio Code):

  1. Make sure there are no errors (bottom left of Visual Studio Code)
    enter image description here
  2. In Visual Studio Code from File menu choose: File > Close Folder (i.e. close current project folder) and close Visual Studio Code.
  3. Re-open Visual Studio Code and choose: File > Open Folder (re-open the folder that contains your project/test files).
  4. Choose Testing and should have visibility of tests from here …

enter image description here

Answered By: Grant Shannon

VScode needs to specify python configure:

  1. Open Command Palette by Ctrl + shift + p
  2. and write this >python: configure tests And follow the program directions

Note: You may need (Mostly you will not need) to do this first before following the previous steps

Answered By: Zakaria Sahen

An obvious thing that caught me…

The test folder hierarchy needs __init__.py files in each folder.

I refactored my tests introducing an extra folder layer and forgot to add __init__.py files.
Command line didn’t complain but vscode showed no tests found

Answered By: user1517142

In my case the problem was that I had a syntax error in a source file which caused the pytest discovery to fail. Also, note that you get the traceback from Output (tab) -> Python (dropdown).

Answered By: HansQ

If everything here fails and you checked all the basic configurations, try specifying the path to your test folder in your workspace’s settings.ini file like so. The three configurations below it are from the majority of other solutions.

"python.testing.pytestArgs": [
    "${workspaceFolder}/tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true,
Answered By: rmazloom