Add tests for progress output and docs for ``console_output_style``
Fix #2657
This commit is contained in:
parent
3441084bd2
commit
3a5dbabf60
|
@ -52,7 +52,7 @@ def pytest_addoption(parser):
|
||||||
help="color terminal output (yes/no/auto).")
|
help="color terminal output (yes/no/auto).")
|
||||||
|
|
||||||
parser.addini("console_output_style",
|
parser.addini("console_output_style",
|
||||||
help="console output: classic or with additional progress information.",
|
help="console output: classic or with additional progress information (classic|progress).",
|
||||||
default='progress')
|
default='progress')
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,7 +300,10 @@ class TerminalReporter:
|
||||||
else:
|
else:
|
||||||
self.ensure_newline()
|
self.ensure_newline()
|
||||||
self.writer.write("[%s]" % rep.node.gateway.id)
|
self.writer.write("[%s]" % rep.node.gateway.id)
|
||||||
self.writer.write(self._get_progress_information_message() + " ", cyan=True)
|
if self._show_progress_info:
|
||||||
|
self.writer.write(self._get_progress_information_message() + " ", cyan=True)
|
||||||
|
else:
|
||||||
|
self.writer.write(' ')
|
||||||
self.writer.write(word, **markup)
|
self.writer.write(word, **markup)
|
||||||
self.writer.write(" " + line)
|
self.writer.write(" " + line)
|
||||||
self.currentfspath = -2
|
self.currentfspath = -2
|
||||||
|
|
|
@ -312,3 +312,22 @@ Builtin configuration file options
|
||||||
relative to :ref:`rootdir <rootdir>`. Additionally path may contain environment
|
relative to :ref:`rootdir <rootdir>`. Additionally path may contain environment
|
||||||
variables, that will be expanded. For more information about cache plugin
|
variables, that will be expanded. For more information about cache plugin
|
||||||
please refer to :ref:`cache_provider`.
|
please refer to :ref:`cache_provider`.
|
||||||
|
|
||||||
|
|
||||||
|
.. confval:: console_output_style
|
||||||
|
|
||||||
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
Sets the console output style while running tests:
|
||||||
|
|
||||||
|
* ``classic``: classic pytest output.
|
||||||
|
* ``progress``: like classic pytest output, but with a progress indicator.
|
||||||
|
|
||||||
|
The default is ``progress``, but you can fallback to ``classic`` if you prefer or
|
||||||
|
the new mode is causing unexpected problems:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
# content of pytest.ini
|
||||||
|
[pytest]
|
||||||
|
console_output_style = classic
|
||||||
|
|
|
@ -964,3 +964,58 @@ def test_no_trailing_whitespace_after_inifile_word(testdir):
|
||||||
testdir.makeini('[pytest]')
|
testdir.makeini('[pytest]')
|
||||||
result = testdir.runpytest('')
|
result = testdir.runpytest('')
|
||||||
assert 'inifile: tox.ini\n' in result.stdout.str()
|
assert 'inifile: tox.ini\n' in result.stdout.str()
|
||||||
|
|
||||||
|
|
||||||
|
class TestProgress:
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def many_tests_file(self, testdir):
|
||||||
|
testdir.makepyfile(
|
||||||
|
test_bar="""
|
||||||
|
import pytest
|
||||||
|
@pytest.mark.parametrize('i', range(10))
|
||||||
|
def test_bar(i): pass
|
||||||
|
""",
|
||||||
|
test_foo="""
|
||||||
|
import pytest
|
||||||
|
@pytest.mark.parametrize('i', range(5))
|
||||||
|
def test_foo(i): pass
|
||||||
|
""",
|
||||||
|
test_foobar="""
|
||||||
|
import pytest
|
||||||
|
@pytest.mark.parametrize('i', range(5))
|
||||||
|
def test_foobar(i): pass
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_normal(self, many_tests_file, testdir):
|
||||||
|
output = testdir.runpytest()
|
||||||
|
output.stdout.re_match_lines([
|
||||||
|
r'test_bar.py \.\.\.\.\.\.\.\.\.\. \s+ \[ 50%\]',
|
||||||
|
r'test_foo.py \.\.\.\.\. \s+ \[ 75%\]',
|
||||||
|
r'test_foobar.py \.\.\.\.\. \s+ \[100%\]',
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_verbose(self, many_tests_file, testdir):
|
||||||
|
output = testdir.runpytest('-v')
|
||||||
|
output.stdout.re_match_lines([
|
||||||
|
r'test_bar.py::test_bar\[0\] PASSED \s+ \[ 5%\]',
|
||||||
|
r'test_foo.py::test_foo\[4\] PASSED \s+ \[ 75%\]',
|
||||||
|
r'test_foobar.py::test_foobar\[4\] PASSED \s+ \[100%\]',
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_xdist_normal(self, many_tests_file, testdir):
|
||||||
|
pytest.importorskip('xdist')
|
||||||
|
output = testdir.runpytest('-n2')
|
||||||
|
output.stdout.re_match_lines([
|
||||||
|
r'\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\. \s+ \[100%\]',
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_xdist_verbose(self, many_tests_file, testdir):
|
||||||
|
pytest.importorskip('xdist')
|
||||||
|
output = testdir.runpytest('-n2', '-v')
|
||||||
|
output.stdout.re_match_lines_random([
|
||||||
|
r'\[gw\d\] \[\s*\d+%\] PASSED test_bar.py::test_bar\[1\]',
|
||||||
|
r'\[gw\d\] \[\s*\d+%\] PASSED test_foo.py::test_foo\[1\]',
|
||||||
|
r'\[gw\d\] \[\s*\d+%\] PASSED test_foobar.py::test_foobar\[1\]',
|
||||||
|
])
|
||||||
|
|
Loading…
Reference in New Issue