Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass multiple pytest command line options in the run configuration

Question

How to pass multiple pytest command line options in PyCharm?

Problem

Setting the pytest logging options --log-level=DEBUG --log-cli=True --log-cli-level=DEBUG fails with the error with the PyCharm Run Configuration.

enter image description here

Launching pytest with arguments --log-level=DEBUG --log-cli=True --log-cli-level=DEBUG ****/test_040_objective_sigmoid.py in ****

ERROR: usage: _jb_pytest_runner.py [options] [file_or_dir] [file_or_dir] [...]
_jb_pytest_runner.py: error: unrecognized arguments: --log-cli=True
  inifile: None
  rootdir: ****

With single argument, it runs without an error.

enter image description here

Launching pytest with arguments --log-level=DEBUG ****test_040_objective_sigmoid.py in ****

============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.2.2, py-1.10.0, pluggy-0.13.1 -- ****/bin/python
cachedir: .pytest_cache
rootdir: ****
plugins: pytest_check-1.0.1
collecting ... collected 5 items

When running the pytest from command line, the pytest logging options work.

$ pytest --log-level=DEBUG --log-cli=True --log-cli-level=DEBUG --verbose --cache-clear -x ${DIR}
=============================================================================================== 
test session starts
===============================================================================================
platform linux -- Python 3.8.5, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
...

pytest setup in PyCharm

enter image description here

References

  • Run/Debug Configuration: pytest
  • Pytest Logging
like image 234
mon Avatar asked Sep 06 '25 03:09

mon


1 Answers

pytest uses a mixture of single - and double -- hyphens preceding the command line options, some are used without an hyphen. In your example only --log-level uses a double hyphen.

The remaining two options log_cli and log_cli_level are written without any leading hyphen and have an underscore in the middle of the name. Those two are also "Configuration Options" and may need to be prefixed with -o.

A complete reference can be found in Command-line Flags.

So instead of:

--log-level=DEBUG --log-cli=True --log-cli-level=DEBUG

try:

--log-level=DEBUG -o log_cli=True -o log_cli_level=DEBUG

screenshot of run configurations

C:\path_to your_project\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2019.3.2\plugins\python\helpers\pycharm\_jb_pytest_runner.py" --path C:/path_to your_project/tests/basic_test.py -- --log-level=DEBUG -v -o log_cli=True -o log_cli_level=DEBUG
Testing started at 3:05 AM ...
Launching pytest with arguments --log-level=DEBUG -v -o log_cli=True -o log_cli_level=DEBUG C:/path_to your_project/tests/basic_test.py in C:\path_to your_project

============================= test session starts =============================
platform win32 -- Python 3.9.0, pytest-6.2.2, py-1.10.0, pluggy-0.13.1 -- C:\path_to your_project\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: C:\path_to your_project, configfile: pytest.ini
collecting ... collected 1 item

tests/basic_test.py::test_validate_args PASSED                      [100%]

============================== 1 passed in 0.02s ==============================

Process finished with exit code 0
like image 114
bad_coder Avatar answered Sep 07 '25 21:09

bad_coder