diff --git a/AUTHORS b/AUTHORS index e19a0ae5871..1df4ff81cc3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -39,6 +39,7 @@ Andrzej Klajnert Andrzej Ostrowski Andy Freeland Anita Hammer +Anna Tasiopoulou Anthon van der Neut Anthony Shaw Anthony Sottile diff --git a/changelog/13072.feature.rst b/changelog/13072.feature.rst new file mode 100644 index 00000000000..73bba0ae2eb --- /dev/null +++ b/changelog/13072.feature.rst @@ -0,0 +1,9 @@ +Terminal tab progress reporting + +Added support for displaying test progress in the terminal tab using OSC 9;4; ANSI sequence. +When pytest runs in a supported terminal emulator (like GNOME Terminal or ConEmu), +you'll see the test progress as a percentage in the terminal tab, allowing you to monitor +test execution progress without having to switch to the pytest tab. + +This feature is automatically enabled when running in a compatible terminal and requires +no additional configuration. diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 3297c38e848..4ba68eda703 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -628,6 +628,24 @@ def pytest_runtest_logreport(self, report: TestReport) -> None: else: markup = {} self._progress_nodeids_reported.add(rep.nodeid) + + # Calculate and send progress information to terminal tab + if self._show_progress_info: + total_items = 0 + if hasattr(self, "_session") and self._session is not None: + if hasattr(self._session, "items"): + total_items = len(self._session.items) + + if total_items > 0: + # Calculate progress percentage (0-100) + progress = int(len(self._progress_nodeids_reported) / total_items * 100) + # OSC 9;4;1;XX ST sequence for progress reporting + # 1 = set progress value, followed by percentage (0-100) + progress_sequence = f"\033]9;4;1;{progress}\033\\" + # Only write the sequence if we're in a terminal + if hasattr(self._tw, "_file") and self._tw._file.isatty(): + print(progress_sequence, end="", file=self._tw._file, flush=True) + if self.config.get_verbosity(Config.VERBOSITY_TEST_CASES) <= 0: self._tw.write(letter, **markup) # When running in xdist, the logreport and logfinish of multiple