16 from robot.utils import get_timestamp, NullMarkupWriter, safe_str, XmlWriter
20 from .loggerhelper
import IsLogged
25 def __init__(self, path, log_level='TRACE', rpa=False, generator='Robot'):
33 return NullMarkupWriter()
34 writer = XmlWriter(path, write_empty=
False, usage=
'output')
37 'rpa':
'true' if rpa
else 'false',
38 'schemaversion':
'3'})
46 self.
_writer_writer.end(
'robot')
61 attrs = {
'timestamp': msg.timestamp
or 'N/A',
'level': msg.level}
63 attrs[
'html'] =
'true'
64 self.
_writer_writer.element(
'msg', msg.message, attrs)
67 attrs = {
'name': kw.kwname,
'library': kw.libname}
68 if kw.type !=
'KEYWORD':
69 attrs[
'type'] = kw.type
71 attrs[
'sourcename'] = kw.sourcename
72 self.
_writer_writer.start(
'kw', attrs)
77 self.
_writer_writer.element(
'doc', kw.doc)
81 self.
_writer_writer.element(
'timeout', attrs={
'value': str(kw.timeout)})
87 self.
_writer_writer.element(
'doc', if_.doc)
94 self.
_writer_writer.start(
'branch', {
'type': branch.type,
95 'condition': branch.condition})
96 self.
_writer_writer.element(
'doc', branch.doc)
100 self.
_writer_writer.end(
'branch')
103 self.
_writer_writer.start(
'for', {
'flavor': for_.flavor})
104 for name
in for_.variables:
105 self.
_writer_writer.element(
'var', name)
106 for value
in for_.values:
107 self.
_writer_writer.element(
'value', value)
108 self.
_writer_writer.element(
'doc', for_.doc)
115 self.
_writer_writer.start(
'iter')
116 for name, value
in iteration.variables.items():
117 self.
_writer_writer.element(
'var', value, {
'name': name})
118 self.
_writer_writer.element(
'doc', iteration.doc)
122 self.
_writer_writer.end(
'iter')
125 self.
_writer_writer.start(
'try')
132 if branch.type == branch.EXCEPT:
133 self.
_writer_writer.start(
'branch', attrs={
134 'type':
'EXCEPT',
'variable': branch.variable,
135 'pattern_type': branch.pattern_type
137 self.
_write_list_write_list(
'pattern', branch.patterns)
139 self.
_writer_writer.start(
'branch', attrs={
'type': branch.type})
143 self.
_writer_writer.end(
'branch')
146 self.
_writer_writer.start(
'while', attrs={
147 'condition': while_.condition,
148 'limit': while_.limit
150 self.
_writer_writer.element(
'doc', while_.doc)
154 self.
_writer_writer.end(
'while')
157 self.
_writer_writer.start(
'iter')
158 self.
_writer_writer.element(
'doc', iteration.doc)
162 self.
_writer_writer.end(
'iter')
165 self.
_writer_writer.start(
'return')
166 for value
in return_.values:
167 self.
_writer_writer.element(
'value', value)
171 self.
_writer_writer.end(
'return')
174 self.
_writer_writer.start(
'continue')
178 self.
_writer_writer.end(
'continue')
181 self.
_writer_writer.start(
'break')
185 self.
_writer_writer.end(
'break')
188 self.
_writer_writer.start(
'test', {
'id': test.id,
'name': test.name,
189 'line': str(test.lineno
or '')})
192 self.
_writer_writer.element(
'doc', test.doc)
195 self.
_writer_writer.element(
'timeout', attrs={
'value': str(test.timeout)})
197 self.
_writer_writer.end(
'test')
200 attrs = {
'id': suite.id,
'name': suite.name,
'source': suite.source}
201 self.
_writer_writer.start(
'suite', attrs)
204 self.
_writer_writer.element(
'doc', suite.doc)
205 for name, value
in suite.metadata.items():
206 self.
_writer_writer.element(
'meta', value, {
'name': name})
208 self.
_writer_writer.end(
'suite')
211 self.
_writer_writer.start(
'statistics')
214 self.
_writer_writer.end(
'statistics')
217 self.
_writer_writer.start(
'total')
220 self.
_writer_writer.end(
'total')
223 self.
_writer_writer.start(
'tag')
229 self.
_writer_writer.start(
'suite')
232 self.
_writer_writer.end(
'suite')
235 self.
_writer_writer.element(
'stat', stat.name,
236 stat.get_attributes(values_as_strings=
True))
239 self.
_writer_writer.start(
'errors')
242 self.
_writer_writer.end(
'errors')
246 self.
_writer_writer.element(tag, item)
249 attrs = {
'status': item.status,
'starttime': item.starttime
or 'N/A',
250 'endtime': item.endtime
or 'N/A'}
251 if not (item.starttime
and item.endtime):
252 attrs[
'elapsedtime'] = str(item.elapsedtime)
253 self.
_writer_writer.element(
'status', item.message, attrs)
def end_errors(self, errors=None)
def start_while_iteration(self, iteration)
Called when a WHILE loop iteration starts.
def set_log_level(self, level)
def start_continue(self, continue_)
Called when a CONTINUE element starts.
def end_test(self, test)
Called when a test ends.
def start_suite(self, suite)
Called when a suite starts.
def _get_writer(self, path, rpa, generator)
def end_continue(self, continue_)
Called when a CONTINUE element ends.
def __init__(self, path, log_level='TRACE', rpa=False, generator='Robot')
def start_break(self, break_)
Called when a BREAK element starts.
def end_tag_statistics(self, tag_stats)
def end_try_branch(self, branch)
Called when TRY, EXCEPT, ELSE and FINALLY branches end.
def start_for(self, for_)
Called when a FOR loop starts.
def _write_status(self, item)
def end_return(self, return_)
Called when a RETURN element ends.
def end_while_iteration(self, iteration)
Called when a WHILE loop iteration ends.
def end_for(self, for_)
Called when a FOR loop ends.
def end_suite(self, suite)
Called when a suite ends.
def log_message(self, msg)
def start_try_branch(self, branch)
Called when TRY, EXCEPT, ELSE or FINALLY branches start.
def start_errors(self, errors=None)
def start_return(self, return_)
Called when a RETURN element starts.
def end_try(self, root)
Called when a TRY/EXCEPT structure ends.
def visit_stat(self, stat)
def start_if(self, if_)
Called when an IF/ELSE structure starts.
def _write_list(self, tag, items)
def start_tag_statistics(self, tag_stats)
def _write_message(self, msg)
def start_try(self, root)
Called when a TRY/EXCEPT structure starts.
def end_total_statistics(self, total_stats)
def start_while(self, while_)
Called when a WHILE loop starts.
def end_for_iteration(self, iteration)
Called when a FOR loop iteration ends.
def end_if_branch(self, branch)
Called when an IF/ELSE branch ends.
def end_statistics(self, stats)
def end_if(self, if_)
Called when an IF/ELSE structure ends.
def start_total_statistics(self, total_stats)
def start_for_iteration(self, iteration)
Called when a FOR loop iteration starts.
def end_break(self, break_)
Called when a BREAK element ends.
def start_test(self, test)
Called when a test starts.
def start_keyword(self, kw)
Called when a keyword starts.
def start_suite_statistics(self, tag_stats)
def end_keyword(self, kw)
Called when a keyword ends.
def end_suite_statistics(self, tag_stats)
def start_if_branch(self, branch)
Called when an IF/ELSE branch starts.
def start_statistics(self, stats)
def end_while(self, while_)
Called when a WHILE loop ends.
Abstract class to conveniently travel :class:~robot.result.executionresult.Result objects.
def end_errors(self, errors)
def start_errors(self, errors)
def get_timestamp(daysep='', daytimesep=' ', timesep=':', millissep='.')
def get_full_version(program=None, naked=False)