From 6c519b12802347b257840c4d286ca0bf94cd92a5 Mon Sep 17 00:00:00 2001 From: Jeffrey Rackauckas Date: Wed, 23 May 2018 19:34:45 -0700 Subject: [PATCH 1/3] Fixed a bug where stdout and stderr were logged twice by junitxml. --- _pytest/junitxml.py | 2 +- changelog/3491.bugfix.rst | 1 + testing/test_junitxml.py | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelog/3491.bugfix.rst diff --git a/_pytest/junitxml.py b/_pytest/junitxml.py index 3a0e4a07144..a4603529bc4 100644 --- a/_pytest/junitxml.py +++ b/_pytest/junitxml.py @@ -224,7 +224,7 @@ def append_skipped(self, report): Junit.skipped("%s:%s: %s" % (filename, lineno, skipreason), type="pytest.skip", message=skipreason)) - self.write_captured_output(report) + self.write_captured_output(report) def finalize(self): data = self.to_xml().unicode(indent=0) diff --git a/changelog/3491.bugfix.rst b/changelog/3491.bugfix.rst new file mode 100644 index 00000000000..7c8bd191c9d --- /dev/null +++ b/changelog/3491.bugfix.rst @@ -0,0 +1 @@ +Fixed a bug where stdout and stderr were logged twice by junitxml. \ No newline at end of file diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py index a8f5b9fecd9..255a68a52c1 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -458,6 +458,23 @@ def test_xfail(): fnode.assert_attr(message="expected test failure") # assert "ValueError" in fnode.toxml() + def test_xfail_captures_output_once(self, testdir): + testdir.makepyfile(""" + import sys + import pytest + + @pytest.mark.xfail() + def test_fail(): + sys.stdout.write('XFAIL This is stdout') + sys.stderr.write('XFAIL This is stderr') + assert 0 + """) + result, dom = runandparse(testdir) + node = dom.find_first_by_tag("testsuite") + tnode = node.find_first_by_tag("testcase") + assert len(tnode.find_by_tag('system-err')) == 1 + assert len(tnode.find_by_tag('system-out')) == 1 + def test_xfailure_xpass(self, testdir): testdir.makepyfile(""" import pytest From 210ad22dbe6d61a4dcfb9a1f431058e6a8c26bad Mon Sep 17 00:00:00 2001 From: Jeffrey Rackauckas Date: Wed, 23 May 2018 19:43:06 -0700 Subject: [PATCH 2/3] Updating changelog text --- changelog/3491.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/3491.bugfix.rst b/changelog/3491.bugfix.rst index 7c8bd191c9d..2ac733cbc04 100644 --- a/changelog/3491.bugfix.rst +++ b/changelog/3491.bugfix.rst @@ -1 +1 @@ -Fixed a bug where stdout and stderr were logged twice by junitxml. \ No newline at end of file +Fixed a bug where stdout and stderr were logged twice by junitxml when a test was marked xfail. \ No newline at end of file From b4e02656226ca74fd0676668926e20e5bceeebf0 Mon Sep 17 00:00:00 2001 From: Jeffrey Rackauckas Date: Wed, 23 May 2018 20:15:28 -0700 Subject: [PATCH 3/3] Removed whitespace from empty line. --- testing/test_junitxml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py index 255a68a52c1..889a2f007d5 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -474,7 +474,7 @@ def test_fail(): tnode = node.find_first_by_tag("testcase") assert len(tnode.find_by_tag('system-err')) == 1 assert len(tnode.find_by_tag('system-out')) == 1 - + def test_xfailure_xpass(self, testdir): testdir.makepyfile(""" import pytest