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),