Skip to content

Commit f858177

Browse files
authored
Merge pull request #4167 from vbarbaresi/3533_junit_escape_skipped
Fix #3533: properly escape raw XML object
2 parents 17655b5 + d72154a commit f858177

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

changelog/3533.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix unescaped XML raw objects in JUnit report for skipped tests

src/_pytest/junitxml.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,14 @@ def append_skipped(self, report):
221221
else:
222222
filename, lineno, skipreason = report.longrepr
223223
if skipreason.startswith("Skipped: "):
224-
skipreason = bin_xml_escape(skipreason[9:])
224+
skipreason = skipreason[9:]
225+
details = "%s:%s: %s" % (filename, lineno, skipreason)
226+
225227
self.append(
226228
Junit.skipped(
227-
"%s:%s: %s" % (filename, lineno, skipreason),
229+
bin_xml_escape(details),
228230
type="pytest.skip",
229-
message=skipreason,
231+
message=bin_xml_escape(skipreason),
230232
)
231233
)
232234
self.write_captured_output(report)

testing/test_junitxml.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,3 +1222,19 @@ def test_func():
12221222
assert result.ret == 0
12231223
node = dom.find_first_by_tag("testsuite")
12241224
node.assert_attr(name=expected)
1225+
1226+
1227+
def test_escaped_skipreason_issue3533(testdir):
1228+
testdir.makepyfile(
1229+
"""
1230+
import pytest
1231+
@pytest.mark.skip(reason='1 <> 2')
1232+
def test_skip():
1233+
pass
1234+
"""
1235+
)
1236+
_, dom = runandparse(testdir)
1237+
node = dom.find_first_by_tag("testcase")
1238+
snode = node.find_first_by_tag("skipped")
1239+
assert "1 <> 2" in snode.text
1240+
snode.assert_attr(message="1 <> 2")

0 commit comments

Comments
 (0)