Robot Framework
resultwriter.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 from robot.conf import RebotSettings
17 from robot.errors import DataError
18 from robot.model import ModelModifier
19 from robot.output import LOGGER
20 from robot.result import ExecutionResult, Result
21 
22 from .jsmodelbuilders import JsModelBuilder
23 from .logreportwriters import LogWriter, ReportWriter
24 from .xunitwriter import XUnitWriter
25 
26 
27 
41 
42  def __init__(self, *sources):
43  self._sources_sources = sources
44 
45 
53  def write_results(self, settings=None, **options):
54  settings = settings or RebotSettings(options)
55  results = Results(settings, *self._sources_sources)
56  if settings.output:
57  self._write_output_write_output(results.result, settings.output)
58  if settings.xunit:
59  self._write_xunit_write_xunit(results.result, settings.xunit)
60  if settings.log:
61  config = dict(settings.log_config,
62  minLevel=results.js_result.min_level)
63  self._write_log_write_log(results.js_result, settings.log, config)
64  if settings.report:
65  results.js_result.remove_data_not_needed_in_report()
66  self._write_report_write_report(results.js_result, settings.report,
67  settings.report_config)
68  return results.return_code
69 
70  def _write_output(self, result, path):
71  self._write_write('Output', result.save, path)
72 
73  def _write_xunit(self, result, path):
74  self._write_write('XUnit', XUnitWriter(result).write, path)
75 
76  def _write_log(self, js_result, path, config):
77  self._write_write('Log', LogWriter(js_result).write, path, config)
78 
79  def _write_report(self, js_result, path, config):
80  self._write_write('Report', ReportWriter(js_result).write, path, config)
81 
82  def _write(self, name, writer, path, *args):
83  try:
84  writer(path, *args)
85  except DataError as err:
86  LOGGER.error(err.message)
87  else:
88  LOGGER.output_file(name, path)
89 
90 
91 class Results:
92 
93  def __init__(self, settings, *sources):
94  self._settings_settings = settings
95  self._sources_sources = sources
96  if len(sources) == 1 and isinstance(sources[0], Result):
97  self._result_result = sources[0]
98  self._prune_prune = False
99  self.return_codereturn_code = self._result_result.return_code
100  else:
101  self._result_result = None
102  self._prune_prune = True
103  self.return_codereturn_code = -1
104  self._js_result_js_result = None
105 
106  @property
107  result = property
108 
109  def result(self):
110  if self._result_result is None:
111  include_keywords = bool(self._settings_settings.log or self._settings_settings.output)
112  flattened = self._settings_settings.flatten_keywords
113  self._result_result = ExecutionResult(include_keywords=include_keywords,
114  flattened_keywords=flattened,
115  merge=self._settings_settings.merge,
116  rpa=self._settings_settings.rpa,
117  *self._sources_sources)
118  if self._settings_settings.rpa is None:
119  self._settings_settings.rpa = self._result_result.rpa
120  modifier = ModelModifier(self._settings_settings.pre_rebot_modifiers,
121  self._settings_settings.process_empty_suite,
122  LOGGER)
123  self._result_result.suite.visit(modifier)
124  self._result_result.configure(self._settings_settings.status_rc,
125  self._settings_settings.suite_config,
126  self._settings_settings.statistics_config)
127  self.return_codereturn_code = self._result_result.return_code
128  return self._result_result
129 
130  @property
131  js_result = property
132 
133  def js_result(self):
134  if self._js_result_js_result is None:
135  builder = JsModelBuilder(log_path=self._settings_settings.log,
136  split_log=self._settings_settings.split_log,
137  expand_keywords=self._settings_settings.expand_keywords,
138  prune_input_to_save_memory=self._prune_prune)
139  self._js_result_js_result = builder.build_from(self.resultresultresult)
140  if self._prune_prune:
141  self._result_result = None
142  return self._js_result_js_result
A class to create log, report, output XML and xUnit files.
Definition: resultwriter.py:40
def _write_log(self, js_result, path, config)
Definition: resultwriter.py:76
def write_results(self, settings=None, **options)
Writes results based on the given settings or options.
Definition: resultwriter.py:53
def _write_xunit(self, result, path)
Definition: resultwriter.py:73
def _write_output(self, result, path)
Definition: resultwriter.py:70
def _write(self, name, writer, path, *args)
Definition: resultwriter.py:82
def _write_report(self, js_result, path, config)
Definition: resultwriter.py:79
def __init__(self, settings, *sources)
Definition: resultwriter.py:93
def ExecutionResult(*sources, **options)
Factory method to constructs :class:~.executionresult.Result objects.