def test_rpa(self): rpa_false = GOLDEN_XML self._validate_rpa(ExecutionResult(StringIO(rpa_false)), False) self._validate_rpa(ExecutionResult(StringIO(rpa_false), rpa=True), True) rpa_true = GOLDEN_XML.replace('rpa="false"', 'rpa="true"') self._validate_rpa(ExecutionResult(StringIO(rpa_true)), True) self._validate_rpa(ExecutionResult(StringIO(rpa_true), rpa=False), False)
def setUp(self): self.result = """ <robot> <suite name="foo"> <test name="some name"> <status status="PASS"></status> </test> <status status="PASS"></status> </suite> </robot> """ self.string_result = ExecutionResult(self.result) self.byte_string_result = ExecutionResult(self.result.encode('UTF-8'))
def test_already_processed(self): inp = SUITE_TEARDOWN_FAILED.replace('generator="Robot', 'generator="Rebot') tc1, tc2 = ExecutionResult(StringIO(inp)).suite.tests assert_equals(tc1.status, 'PASS') assert_equals(tc1.message, '') assert_equals(tc2.status, 'FAIL') assert_equals(tc2.message, 'Message')
def setUp(self): result = ExecutionResult(StringIO(GOLDEN_XML), StringIO(GOLDEN_XML), StringIO(GOLDEN_XML), merge=True) self.suite = result.suite self.test = self.suite.tests[0]
def process_file(inpath, outpath, items): suite = ExecutionResult(inpath).suite with open(outpath, 'w', newline='') as outfile: writer = csv.writer(outfile, delimiter=';') writer.writerow(['TYPE', 'NAME', 'STATUS', 'START', 'END', 'ELAPSED', 'ELAPSED SECS']) process_suite(suite, writer, items.lower())
def test_with_increasing_cut_from_end(self): input = open(os.path.join('test', 'orig-output.xml')).read() while len(input) > 250: input = input[:-10] fixxxed = fixml.Fixxxer(input) suite = ExecutionResult(str(fixxxed)).suite assert_equals(suite.name, 'Suite')
def result(self): if self._result is None: self._result = ExecutionResult(*self._data_sources) self._result.configure(self._settings.status_rc, self._settings.suite_config, self._settings.statistics_config) self.return_code = self._result.return_code return self._result
def process_file(inpath, outpath, items): suite = ExecutionResult(inpath).suite outfile = open(outpath, 'wb') writer = csv.writer(outfile) writer.writerow(['TYPE', 'NAME', 'STATUS', 'START', 'END', 'ELAPSED', 'ELAPSED SECS']) process_suite(suite, writer, items.lower()) outfile.close()
def setUp(self): result = ExecutionResult(StringIO(GOLDEN_XML)) self._suite = result.suite self._test = self._suite.tests[0] self._keyword = self._test.keywords[0] self._user_keyword = self._test.keywords[1] self._message = self._keyword.messages[0] self._setup = self._suite.keywords[0] self._errors = result.errors
def setUp(self): self.result = ExecutionResult(StringIO(GOLDEN_XML)) self.suite = self.result.suite self.test = self.suite.tests[0] self.keyword = self.test.keywords[0] self.user_keyword = self.test.keywords[1] self.message = self.keyword.messages[0] self.setup = self.suite.keywords[0] self.errors = self.result.errors
def test_already_processed(self): inp = SUITE_TEARDOWN_FAILED.replace('generator="Robot', 'generator="Rebot') passed, failed, teardowns = ExecutionResult(StringIO(inp)).suite.tests assert_equal(passed.status, 'PASS') assert_equal(passed.message, '') assert_equal(failed.status, 'FAIL') assert_equal(failed.message, 'Message') assert_equal(teardowns.status, 'PASS') assert_equal(teardowns.message, '')
def test_save(self): temp = os.getenv('TEMPDIR', tempfile.gettempdir()) path = Path(temp) / 'pathlib.xml' self.result.save(path) try: result = ExecutionResult(path) finally: path.unlink() self.test_suite_is_built(result.suite) self.test_test_is_built(result.suite)
def test_suite_message(self): xml = """ <robot> <suite name="foo"> <status status="FAIL">Setup failed</status> </suite> </robot> """ suite = ExecutionResult(StringIO(xml)).suite assert_equal(suite.message, 'Setup failed')
def result(self): if self._result is None: include_keywords = bool(self._settings.log or self._settings.output) self._result = ExecutionResult(include_keywords=include_keywords, *self._sources) self._result.configure(self._settings.status_rc, self._settings.suite_config, self._settings.statistics_config) self.return_code = self._result.return_code return self._result
def overwrite_output_file(self): """ Method removes all dummy test results from output.xml file together with messages related with those tests It overwrites output.xml file generated by robot executor :return: None """ result = ExecutionResult(self.output_file_path) result.suite.tests = [test for test in result.suite.tests if self.REMOVE_NAME.lower() not in test.name.lower()] ResultWriter(result).write_results( output=self.output_file_path, report=self.report_file_path, log=self.logger_file_path )
def setUp(self): self.result = ExecutionResult(""" <robot> <suite name="foo"> <test name="some name"> <status status="PASS"></status> </test> <status status="PASS"></status> </suite> </robot> """)
def test_result_is_built(self): xml = """ <robot> <suite name="foo"> <test name="some name"> <status status="PASS"></status> </test> <status status="PASS"></status> </suite> </robot> """.strip() result = ExecutionResult(xml)
def gather_failed_suites(output, empty_suite_ok=False): if output is None: return None gatherer = GatherFailedSuites() try: ExecutionResult(output, include_keywords=False).suite.visit(gatherer) if not gatherer.suites and not empty_suite_ok: raise DataError('All suites passed.') except Exception: raise DataError("Collecting failed suites from '%s' failed: %s" % (output, get_error_message())) return gatherer.suites
def test_excluding_keywords_and_already_processed(self): inp = SUITE_TEARDOWN_FAILED.replace('generator="Robot', 'generator="Rebot') suite = ExecutionResult(StringIO(inp), include_keywords=False).suite passed, failed, teardowns = suite.tests assert_equal(passed.status, 'PASS') assert_equal(passed.message, '') assert_equal(failed.status, 'FAIL') assert_equal(failed.message, 'Message') assert_equal(teardowns.status, 'PASS') assert_equal(teardowns.message, '') for item in suite, passed, failed, teardowns: assert_equal(list(item.keywords), [])
def gather_failed_tests(output): if output.upper() == 'NONE': return [] gatherer = GatherFailedTests() try: ExecutionResult(output).suite.visit(gatherer) if not gatherer.tests: raise DataError('All tests passed.') except: raise DataError("Collecting failed tests from '%s' failed: %s" % (output, get_error_message())) return gatherer.tests
def gather_failed_suites(output): if output.upper() == 'NONE': return [] gatherer = RenameThenGatherFailedSuites() try: ExecutionResult(output, include_keywords=False).suite.visit(gatherer) if not gatherer.suites: raise DataError('All suites passed.') except: raise DataError("Collecting failed suites from '%s' failed: %s" % (output, get_error_message())) return gatherer.suites
def test_excluding_keywords(self): suite = ExecutionResult(StringIO(SUITE_TEARDOWN_FAILED), include_keywords=False).suite passed, failed, teardowns = suite.tests assert_equal(passed.status, 'FAIL') assert_equal(passed.message, 'Parent suite teardown failed:\nXXX') assert_equal(failed.status, 'FAIL') assert_equal(failed.message, 'Message\n\n' 'Also parent suite teardown failed:\nXXX') assert_equal(teardowns.status, 'FAIL') assert_equal(teardowns.message, 'Parent suite teardown failed:\nXXX') for item in suite, passed, failed, teardowns: assert_equal(list(item.keywords), [])
def test_test_message(self): xml = """ <robot> <suite name="foo"> <test name="test"> <status status="FAIL">Failure message</status> </test> </suite> </robot> """ test = ExecutionResult(StringIO(xml)).suite.tests[0] assert_equal(test.message, 'Failure message') assert_equal(test.status, 'FAIL') assert_equal(test.longname, 'foo.test')
def push_testdetails_to_sql(inxml, buildtag): result = ExecutionResult(inxml) stats = result.statistics test_details = result.suite.tests._items testsuite = stats.suite.stat._name for test in test_details: testcase_name = test.name tags = ", ".join(test.tags._tags) if test.tags._tags else "" test_passed = str(test.passed) querystring = "insert into testrundetails values \ ('" + buildtag + "','" + testsuite + "','" + testcase_name + "','" + tags + "','" + test_passed + "')" print querystring cur.execute(querystring) con.commit()
def result(self): if self._result is None: include_keywords = bool(self._settings.log or self._settings.output) flattened = self._settings.flatten_keywords rerun_merge = self._settings.rerun_merge self._result = ExecutionResult(include_keywords=include_keywords, flattened_keywords=flattened, rerun_merge=rerun_merge, *self._sources) self._result.configure(self._settings.status_rc, self._settings.suite_config, self._settings.statistics_config) self.return_code = self._result.return_code return self._result
def gather_failed_tests(output, empty_suite_ok=False): if output is None: return None gatherer = GatherFailedTests() tests_or_tasks = 'tests or tasks' try: suite = ExecutionResult(output, include_keywords=False).suite suite.visit(gatherer) tests_or_tasks = 'tests' if not suite.rpa else 'tasks' if not gatherer.tests and not empty_suite_ok: raise DataError('All %s passed.' % tests_or_tasks) except Exception: raise DataError("Collecting failed %s from '%s' failed: %s" % (tests_or_tasks, output, get_error_message())) return gatherer.tests
def gather_failed_tests(output): if output.upper() == 'NONE': return [] gatherer = GatherFailedTests() tests_or_tasks = 'tests or tasks' try: suite = ExecutionResult(output, include_keywords=False).suite suite.visit(gatherer) tests_or_tasks = 'tests' if not suite.rpa else 'tasks' if not gatherer.tests: raise DataError('All %s passed.' % tests_or_tasks) except: raise DataError("Collecting failed %s from '%s' failed: %s" % (tests_or_tasks, output, get_error_message())) return gatherer.tests
def result(self): if self._result is None: include_keywords = bool(self._settings.log or self._settings.output) flattened = self._settings.flatten_keywords self._result = ExecutionResult(include_keywords=include_keywords, flattened_keywords=flattened, merge=self._settings.merge, *self._sources) self._result.configure(self._settings.status_rc, self._settings.suite_config, self._settings.statistics_config) modifier = ModelModifier(self._settings.pre_rebot_modifiers, self._settings.process_empty_suite, LOGGER) self._result.suite.visit(modifier) self.return_code = self._result.return_code return self._result
def test_nested_suites(self): xml = """ <robot> <suite name="foo"> <suite name="bar"> <suite name="quux"> </suite> </suite> </suite> </robot> """ suite = ExecutionResult(StringIO(xml)).suite assert_equal(suite.name, 'foo') assert_equal(suite.suites[0].name, 'bar') assert_equal(suite.longname, 'foo') assert_equal(suite.suites[0].longname, 'foo.bar') assert_equal(suite.suites[0].suites[0].name, 'quux') assert_equal(suite.suites[0].suites[0].longname, 'foo.bar.quux')
def report(request): param_dict['title'] = '报告' data = {} history_dir = os.path.join(media_dir, 'history') keys = list(filter(None, [y for y in os.listdir(history_dir)])) for key in keys: data[key] = {} childkeys = list( filter(None, [y for y in os.listdir(os.path.join(history_dir, key))])) for ckey in childkeys: xml_path = os.path.join(history_dir, key, ckey, 'output.xml') suite = ExecutionResult(xml_path).suite allTests = suite.statistics.critical data[key][ckey] = [ allTests.total, allTests.passed, allTests.failed ] param_dict['data'] = data return render(request, 'report.html', param_dict)