pytest-dev / pytest

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing
https://pytest.org
MIT License
12.07k stars 2.67k forks source link

terminalreporter prepends a newline on first write if tests are collected #12777

Open dmtucker opened 1 month ago

dmtucker commented 1 month ago
# conftest.py
def pytest_terminal_summary(terminalreporter):
    terminalreporter.section("This is a section.")
    terminalreporter.write_line("This is a line.")
    terminalreporter.write_line("This is another line.")
    terminalreporter.section("This is another section.")
    terminalreporter.write_line("This is a 3rd line.")
    terminalreporter.write_line("This is a 4th line.")
$ pipenv run pytest
====================== test session starts =======================
platform linux -- Python 3.10.12, pytest-8.3.2, pluggy-1.5.0
rootdir: /tmp/tmp.WXMdPn0b6L
collected 0 items                                                

======================= This is a section. =======================
This is a line.
This is another line.
==================== This is another section. ====================
This is a 3rd line.
This is a 4th line.
===================== no tests ran in 0.00s ======================
$ pipenv run pytest
====================== test session starts =======================
platform linux -- Python 3.10.12, pytest-8.3.2, pluggy-1.5.0
rootdir: /tmp/tmp.WXMdPn0b6L
collected 1 item                                                 

test_pass.py .                                             [100%]
======================= This is a section. =======================
                                                           <------ Where did this come from?
This is a line.
This is another line.
==================== This is another section. ====================
This is a 3rd line.
This is a 4th line.
======================= 1 passed in 0.00s ========================
dmtucker commented 1 month ago

Interestingly, it doesn't seem to happen running with xdist:

$ pipenv run pytest -n auto
====================== test session starts =======================
platform linux -- Python 3.10.12, pytest-8.3.2, pluggy-1.5.0
rootdir: /tmp/tmp.WXMdPn0b6L
plugins: xdist-3.6.1
8 workers [1 item]      
.                                                          [100%]
======================= This is a section. =======================
This is a line.
This is another line.
==================== This is another section. ====================
This is a 3rd line.
This is a 4th line.
======================= 1 passed in 0.58s ========================
Oreldm commented 1 month ago

Created a PR https://github.com/pytest-dev/pytest/pull/12783 Indeed it is coming from the first terminalreporter.write_line("This is a line."). That's because self.currentfspath = -2 when it's not xdixt :

if not running_xdist:
   self.write_ensure_prefix(line, word, **markup) - > Which Updates self.currentfspath = -2