Skip to content

Commit

Permalink
Merge pull request #5087 from samueljsb/issue/4907
Browse files Browse the repository at this point in the history
Show XFail reason as part of JUnitXML message field
  • Loading branch information
nicoddemus committed Apr 11, 2019
2 parents 97cd5f0 + a37d1df commit 48ed437
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 2 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -208,6 +208,7 @@ Ross Lawley
Russel Winder
Ryan Wooden
Samuel Dion-Girardeau
Samuel Searles-Bryant
Samuele Pedroni
Sankt Petersbug
Segev Finer
Expand Down
1 change: 1 addition & 0 deletions changelog/4907.feature.rst
@@ -0,0 +1 @@
Show XFail reason as part of JUnitXML message field.
9 changes: 8 additions & 1 deletion src/_pytest/junitxml.py
Expand Up @@ -252,7 +252,14 @@ def append_error(self, report):

def append_skipped(self, report):
if hasattr(report, "wasxfail"):
self._add_simple(Junit.skipped, "expected test failure", report.wasxfail)
xfailreason = report.wasxfail
if xfailreason.startswith("reason: "):
xfailreason = xfailreason[8:]
self.append(
Junit.skipped(
"", type="pytest.xfail", message=bin_xml_escape(xfailreason)
)
)
else:
filename, lineno, skipreason = report.longrepr
if skipreason.startswith("Skipped: "):
Expand Down
20 changes: 19 additions & 1 deletion testing/test_junitxml.py
Expand Up @@ -485,9 +485,27 @@ def test_xfail():
tnode = node.find_first_by_tag("testcase")
tnode.assert_attr(classname="test_xfailure_function", name="test_xfail")
fnode = tnode.find_first_by_tag("skipped")
fnode.assert_attr(message="expected test failure")
fnode.assert_attr(type="pytest.xfail", message="42")
# assert "ValueError" in fnode.toxml()

def test_xfailure_marker(self, testdir):
testdir.makepyfile(
"""
import pytest
@pytest.mark.xfail(reason="42")
def test_xfail():
assert False
"""
)
result, dom = runandparse(testdir)
assert not result.ret
node = dom.find_first_by_tag("testsuite")
node.assert_attr(skipped=1, tests=1)
tnode = node.find_first_by_tag("testcase")
tnode.assert_attr(classname="test_xfailure_marker", name="test_xfail")
fnode = tnode.find_first_by_tag("skipped")
fnode.assert_attr(type="pytest.xfail", message="42")

def test_xfail_captures_output_once(self, testdir):
testdir.makepyfile(
"""
Expand Down

0 comments on commit 48ed437

Please sign in to comment.