diff --git a/validate/launcher/baseclasses.py b/validate/launcher/baseclasses.py
index 37164cb2fa..3e8cd62edf 100644
--- a/validate/launcher/baseclasses.py
+++ b/validate/launcher/baseclasses.py
@@ -83,6 +83,7 @@ class Test(Loggable):
self.thread = None
self.queue = None
self.duration = duration
+ self.stack_trace = None
if expected_failures is None:
self.expected_failures = []
elif not isinstance(expected_failures, list):
@@ -212,6 +213,8 @@ class Test(Loggable):
info = "\n\n== Stack trace: == \n%s" % stack_trace
if self.options.redirect_logs:
print(info)
+ elif self.options.xunit_file:
+ self.stack_trace = stack_trace
else:
with open(self.logfile, 'a') as f:
f.write(info)
diff --git a/validate/launcher/reporters.py b/validate/launcher/reporters.py
index 486276b88f..5006ab1aeb 100644
--- a/validate/launcher/reporters.py
+++ b/validate/launcher/reporters.py
@@ -202,15 +202,21 @@ class XunitReporter(Reporter):
"""
self.stats['failures'] += 1
+ stack_trace = ''
+ if test.stack_trace:
+ stack_trace = '\n' \
+ '' % (
+ self._quoteattr(test.message), escape_cdata(test.stack_trace))
xml_file = codecs.open(self.tmp_xml_file.name, 'a',
self.encoding, 'replace')
xml_file.write(self._forceUnicode(
''
- ''
+ '%(stacktrace)s'
'%(systemout)s' %
{'cls': self._quoteattr(test.get_classname()),
'name': self._quoteattr(test.get_name()),
'taken': test.time_taken,
+ 'stacktrace': stack_trace,
'errtype': self._quoteattr(test.result),
'message': self._quoteattr(test.message),
'systemout': self._get_captured(test),