From 577b0dffe75eda21d2ae8db8480112341153a2d6 Mon Sep 17 00:00:00 2001 From: Thomas Hisch Date: Tue, 4 Jun 2019 23:43:40 +0200 Subject: [PATCH] Fix verbosity bug in --collect-only --- changelog/5383.bugfix.rst | 2 ++ src/_pytest/logging.py | 13 +++++++--- testing/logging/test_reporting.py | 43 ++++++++++++++++++++++++++----- 3 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 changelog/5383.bugfix.rst diff --git a/changelog/5383.bugfix.rst b/changelog/5383.bugfix.rst new file mode 100644 index 00000000000..53e25956d56 --- /dev/null +++ b/changelog/5383.bugfix.rst @@ -0,0 +1,2 @@ +``-q`` has again an impact on the style of the collected items +(``--collect-only``) when ``--log-cli-level`` is used. diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index ac0c4c2b337..df18b81cdc0 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -409,10 +409,6 @@ def __init__(self, config): """ self._config = config - # enable verbose output automatically if live logging is enabled - if self._log_cli_enabled() and config.getoption("verbose") < 1: - config.option.verbose = 1 - self.print_logs = get_option_ini(config, "log_print") self.formatter = self._create_formatter( get_option_ini(config, "log_format"), @@ -628,6 +624,15 @@ def pytest_sessionstart(self): @pytest.hookimpl(hookwrapper=True) def pytest_runtestloop(self, session): """Runs all collected test items.""" + + if session.config.option.collectonly: + yield + return + + if self._log_cli_enabled() and self._config.getoption("verbose") < 1: + # setting verbose flag is needed to avoid messy test progress output + self._config.option.verbose = 1 + with self.live_logs_context(): if self.log_file_handler is not None: with catching_logs(self.log_file_handler, level=self.log_file_level): diff --git a/testing/logging/test_reporting.py b/testing/logging/test_reporting.py index 68be819b9a4..bb1aebc097a 100644 --- a/testing/logging/test_reporting.py +++ b/testing/logging/test_reporting.py @@ -916,14 +916,45 @@ def test_collection_live_logging(testdir): result = testdir.runpytest("--log-cli-level=INFO") result.stdout.fnmatch_lines( - [ - "collecting*", - "*--- live log collection ---*", - "*Normal message*", - "collected 0 items", - ] + ["*--- live log collection ---*", "*Normal message*", "collected 0 items"] + ) + + +@pytest.mark.parametrize("verbose", ["", "-q", "-qq"]) +def test_collection_collect_only_live_logging(testdir, verbose): + testdir.makepyfile( + """ + def test_simple(): + pass + """ ) + result = testdir.runpytest("--collect-only", "--log-cli-level=INFO", verbose) + + expected_lines = [] + + if not verbose: + expected_lines.extend( + [ + "*collected 1 item*", + "**", + "*no tests ran*", + ] + ) + elif verbose == "-q": + assert "collected 1 item*" not in result.stdout.str() + expected_lines.extend( + [ + "*test_collection_collect_only_live_logging.py::test_simple*", + "no tests ran in * seconds", + ] + ) + elif verbose == "-qq": + assert "collected 1 item*" not in result.stdout.str() + expected_lines.extend(["*test_collection_collect_only_live_logging.py: 1*"]) + + result.stdout.fnmatch_lines(expected_lines) + def test_collection_logging_to_file(testdir): log_file = testdir.tmpdir.join("pytest.log").strpath