Similarly to this OP's issue, but the other way around, pytest
works for me within my virtual environment ("venv") only when running python -m pytest
, but not with just running pytest
in my console.
I'm working with VS Code on Windows 10 within the built-in console.
The command pytest
does not work in neither scenario: neither in the global scope, nor in the target venv. By contrast, python -m pytest
works within said venv.
I'm working with CLI from the root directory of the project whose full directory tree is:
(Testing) PS C:\Users\user\Documents\Programming\Testing> tree /F
Folder PATH listing for volume Windows
Volume serial number is 50BE-501E
C:.
│ default_python_script.py
│
├───.benchmarks
├───.pytest_cache
│ │ .gitignore
│ │ CACHEDIR.TAG
│ │ README.md
│ │
│ └───v
│ └───cache
│ lastfailed
│ nodeids
│ stepwise
│
├───.vscode
│ launch.json
│ settings.json
│
├───cli_testapp
│ │ cli_testapp.py
│ │ __init__.py
│ │
│ └───__pycache__
│ cli_testapp.cpython-39.pyc
│ __init__.cpython-39.pyc
│
├───my_sum
│ │ my_sum.py
│ │ __init__.py
│ │
│ └───__pycache__
│ my_sum.cpython-39.pyc
│ __init__.cpython-39.pyc
│
├───tests
│ │ errors_pytest.log
│ │ test.py
│ │ testing.py
│ │ test_with_pytest.py
│ │
│ ├───.benchmarks
│ ├───.pytest_cache
│ │ │ .gitignore
│ │ │ CACHEDIR.TAG
│ │ │ README.md
│ │ │
│ │ └───v
│ │ └───cache
│ │ lastfailed
│ │ nodeids
│ │ stepwise
│ │
│ └───__pycache__
│ test.cpython-39.pyc
│ testing.cpython-39.pyc
│ test_with_pytest.cpython-39-pytest-6.2.3.pyc
│ test_with_pytest.cpython-39.pyc
│
└───__pycache__
test.cpython-39.pyc
testing.cpython-39.pyc
What's annoying about it is that I'd like to use the helpful VS Code testing kit, which facilitates employing any testing framework, also pytest
. The problem is that VS Code uses the following command by default to run the testing:
python c:\Users\user\.vscode\extensions\ms-python.python-2021.3.680753044\pythonFiles\testing_tools\run_adapter.py discover pytest -- --rootdir c:\Users\user\Documents\Programming\Testing -s tests
As one can inspect, it uses pytest
instead of python -m pytest
. Apparently, the default way of implementation via VS Code doesn't load correctly the environmental variables, since it always produces the following error:
Test Discovery failed:
Error: ============================= test session starts =============================
platform win32 -- Python 3.9.0a4, pytest-6.2.3, py-1.10.0, pluggy-0.13.1
benchmark: 3.4.1 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: c:\Users\user\Documents\Programming\Testing
plugins: benchmark-3.4.1
collected 0 items / 1 error
=================================== ERRORS ====================================
_________________ ERROR collecting tests/test_with_pytest.py __________________
ImportError while importing test module 'c:\Users\user\Documents\Programming\Testing\tests\test_with_pytest.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
..\..\..\.pyenv\pyenv-win\versions\3.9.0a4\lib\importlib\__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests\test_with_pytest.py:22: in <module>
from cli_testapp import cli_testapp
E ModuleNotFoundError: No module named 'cli_testapp'
=========================== short test summary info ===========================
ERROR tests/test_with_pytest.py
!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
==================== no tests collected, 1 error in 0.23s =====================
Traceback (most recent call last):
File "c:\Users\user\.vscode\extensions\ms-python.python-2021.3.680753044\pythonFiles\testing_tools\run_adapter.py", line 22, in <module>
main(tool, cmd, subargs, toolargs)
File "c:\Users\user\.vscode\extensions\ms-python.python-2021.3.680753044\pythonFiles\testing_tools\adapter\__main__.py", line 100, in main
parents, result = run(toolargs, **subargs)
File "c:\Users\user\.vscode\extensions\ms-python.python-2021.3.680753044\pythonFiles\testing_tools\adapter\pytest\_discovery.py", line 44, in discover
raise Exception("pytest discovery failed (exit code {})".format(ec))
Exception: pytest discovery failed (exit code 2)
For the sake of completeness, I'm going to post how it looks like with python -m pytest
within the venv correctly loaded (CLI utilized here):
(Testing) PS C:\Users\user\Documents\Programming\Testing> python -m pytest
=================================================================== test session starts ===================================================================
platform win32 -- Python 3.9.0a4, pytest-6.2.3, py-1.10.0, pluggy-0.13.1
benchmark: 3.4.1 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: C:\Users\user\Documents\Programming\Testing
plugins: benchmark-3.4.1
collected 7 items
tests\test_with_pytest.py .F....F [100%]
======================================================================== FAILURES =========================================================================
____________________________________________________________________ test_always_fails ____________________________________________________________________
def test_always_fails():
"""Function docs:\n
See above with function docs of "test_always_passes()".
"""
> assert False
E assert False
tests\test_with_pytest.py:46: AssertionError
______________________________________________________________ test_initial_transform[dict] _______________________________________________________________
generate_initial_transform_parameters = ({'city': 'Anytown', 'name': ...})
def test_initial_transform(generate_initial_transform_parameters):
test_input = generate_initial_transform_parameters[0]
expected_output = generate_initial_transform_parameters[1]
> assert cli_testapp.initial_transform(test_input) == expected_output
E AssertionError: assert {'city': 'Any...e': 'FL', ...} == {'city': 'Any...Public'], ...}
E Omitting 5 identical items, use -vv to show
...
tests\test_with_pytest.py:118: AssertionError
================================================================= short test summary info =================================================================
FAILED tests/test_with_pytest.py::test_always_fails - assert False
FAILED tests/test_with_pytest.py::test_initial_transform[dict] - AssertionError: assert {'city': 'Any...e': 'FL', ...} == {'city': 'Any...Public'], ...}
=============================================================== 2 failed, 5 passed in 0.31s ===============================================================
How can I resolve this issue that it'll always work, also with just pytest
? This is particularly important, because I'd love to leverage the amenities provided by VS Code, which employs a default command based on just pytest
.
Aucun commentaire:
Enregistrer un commentaire