diff --git a/AUTHORS b/AUTHORS index 610d04c4b..a19e38bbf 100644 --- a/AUTHORS +++ b/AUTHORS @@ -58,6 +58,7 @@ Christian Theunert Christian Tismer Christopher Gilling Christopher Dignam +Claudio Madotto CrazyMerlyn Cyrus Maden Damian Skrzypczak diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d33a9e09b..5184610fd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -48,12 +48,6 @@ jobs: # pypy3: # python.version: 'pypy3' # tox.env: 'pypy3' - py34-xdist: - python.version: '3.4' - tox.env: 'py34-xdist' - # Coverage for: - # - _pytest.compat._bytes_to_ascii - PYTEST_COVERAGE: '1' py35-xdist: python.version: '3.5' tox.env: 'py35-xdist' diff --git a/changelog/5430.bugfix.rst b/changelog/5430.bugfix.rst new file mode 100644 index 000000000..734685063 --- /dev/null +++ b/changelog/5430.bugfix.rst @@ -0,0 +1 @@ +junitxml: Logs for failed test are now passed to junit report in case the test fails during call phase. diff --git a/src/_pytest/junitxml.py b/src/_pytest/junitxml.py index 7858d8f31..853dcb774 100644 --- a/src/_pytest/junitxml.py +++ b/src/_pytest/junitxml.py @@ -597,6 +597,8 @@ class LogXML(object): if report.when == "call": reporter.append_failure(report) self.open_reports.append(report) + if not self.log_passing_tests: + reporter.write_captured_output(report) else: reporter.append_error(report) elif report.skipped: diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py index 7d6dfde9b..ba529cf33 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -1409,3 +1409,39 @@ def test_logging_passing_tests_disabled_does_not_log_test_output(testdir): node = dom.find_first_by_tag("testcase") assert len(node.find_by_tag("system-err")) == 0 assert len(node.find_by_tag("system-out")) == 0 + + +@pytest.mark.parametrize("junit_logging", ["no", "system-out", "system-err"]) +def test_logging_passing_tests_disabled_logs_output_for_failing_test_issue5430( + testdir, junit_logging +): + testdir.makeini( + """ + [pytest] + junit_log_passing_tests=False + """ + ) + testdir.makepyfile( + """ + import pytest + import logging + import sys + + def test_func(): + logging.warning('hello') + assert 0 + """ + ) + result, dom = runandparse(testdir, "-o", "junit_logging=%s" % junit_logging) + assert result.ret == 1 + node = dom.find_first_by_tag("testcase") + if junit_logging == "system-out": + assert len(node.find_by_tag("system-err")) == 0 + assert len(node.find_by_tag("system-out")) == 1 + elif junit_logging == "system-err": + assert len(node.find_by_tag("system-err")) == 1 + assert len(node.find_by_tag("system-out")) == 0 + else: + assert junit_logging == "no" + assert len(node.find_by_tag("system-err")) == 0 + assert len(node.find_by_tag("system-out")) == 0