def testTestDetailsWithExecution(self): t0 = Test(1, "Test 0", "1111") t0.description = "This is my test" t0.add_parameter("tparam0", "tvalue1") t0.add_parameter("tparam1", "tvalue2") t0.add_property("tprop0", "tvalue0") t0.add_property("tprop1", "tvalue1") t1 = Test(2, "Test 2", "2222") t1.set_status("error") t2 = Test(3, "Test 3", "3333") t2.set_status("failure") s0 = Scenario("Scenario 0") s0.add_scenario_property("foo0", "bar0") s0.add_scenario_property("foo1", "bar1") s0.add_child(t0) s0.add_child(t1) s0.add_child(t2) m0 = Machine("Itai's desktop") m0.add_child(s0) e = Execution() e.add_machine(m0) print(json.dumps(e.dict()))
def testSimpleModel(self): expected = {'machines': [{'status': 'success', 'type': 'machine', 'name': "Itai's desktop", 'children': [{'status': 'success', 'children': [{'status': 'success', 'index': 1, 'uid': '1111', 'parameters': {'tparam0': 'tvalue1', 'tparam1': 'tvalue2'}, 'timestamp': '', 'name': 'Test 0', 'className': '', 'duration': 0, 'type': 'test', 'properties': {'tprop1': 'tvalue1', 'tprop0': 'tvalue0'}, 'description': 'This is my test'}, {'status': 'error', 'index': 2, 'uid': '2222', 'parameters': {}, 'timestamp': '', 'name': 'Test 2', 'className': '', 'duration': 0, 'type': 'test', 'properties': {}, 'description': ''}, {'status': 'failure', 'index': 3, 'uid': '3333', 'parameters': {}, 'timestamp': '', 'name': 'Test 3', 'className': '', 'duration': 0, 'type': 'test', 'properties': {}, 'description': ''}], 'type': 'scenario', 'name': 'Scenario 0', 'scenarioProperties': {'foo0': 'bar0', 'foo1': 'bar1'}}]}]} t0 = Test(1, "Test 0", "1111") t0.description = "This is my test" t0.add_parameter("tparam0", "tvalue1") t0.add_parameter("tparam1", "tvalue2") t0.add_property("tprop0", "tvalue0") t0.add_property("tprop1", "tvalue1") t1 = Test(2, "Test 2", "2222") t1.set_status("error") t2 = Test(3, "Test 3", "3333") t2.set_status("failure") s0 = Scenario("Scenario 0") s0.add_scenario_property("foo0", "bar0") s0.add_scenario_property("foo1", "bar1") s0.add_child(t0) s0.add_child(t1) s0.add_child(t2) m0 = Machine("Itai's desktop") m0.add_child(s0) e = Execution() e.add_machine(m0) print (e.dict()) self.assertDictEqual(expected, e.dict())
class AbstractReport(object): TIME_FORMAT = '%H:%M:%S:' DATE_FORMAT = '%Y/%m/%d' ROBOT_FORMAT = '%Y%m%d %H:%M:%S' def __init__(self): self.general_conf = Conf("general") self.init_model() self.start() self.num_of_suites_to_ignore = self.general_conf.get_int( "num.of.suites.to.ignore") def init_model(self): self.execution = Execution() machine = Machine(socket.gethostname()) machine.planned_tests = self.general_conf.get_int("planned.tests") self.execution.add_machine(machine) self.uid = str(randint(1000, 9999) + time.time() / 1000).replace( ".", "") self.index = 0 self.scenario_stack = [] self.buffered_elements = [] self.testDetails = None def start_suite(self, name, attr): self.execution.get_last_machine().planned_tests = 0 if self.num_of_suites_to_ignore > 0: self.num_of_suites_to_ignore -= 1 return self.num_of_suites_to_ignore -= 1 self.scenario = Scenario(name) self.scenario.scenarioProperties = self.get_additional_execution_properties( ) if len(self.scenario_stack) != 0: self.scenario_stack[-1].add_child(self.scenario) else: self.execution.get_last_machine().add_child(self.scenario) self.scenario_stack.append(self.scenario) self.write_execution() def end_suite(self, name, attrs): self.num_of_suites_to_ignore += 1 if self.num_of_suites_to_ignore > 0: return if len(self.scenario_stack) != 0: self.scenario_stack.pop() self.testDetails = None def end_test(self, name, attrs): if len(self.scenario_stack) == 0: return self.test.set_status(attrs["status"]) self.test.duration = attrs["elapsedtime"] self.write_test_details() self.write_execution() def start_test(self, name, attrs): if len(self.scenario_stack) == 0: return self.test_start_time = datetime.strptime(attrs['starttime'], AbstractReport.ROBOT_FORMAT) self.test = Test(self.index, name, self.uid + "_" + str(self.index), attrs['className']) self.testDetails = TestDetails(self.uid + "_" + str(self.index)) self.index += 1 self.test.timstamp = self.test_start_time.strftime( AbstractReport.TIME_FORMAT) self.test.date = self.test_start_time.strftime( AbstractReport.DATE_FORMAT) self.test.description = attrs['doc'] self.scenario.add_child(self.test) if len(self.buffered_elements) > 0: for element in self.buffered_elements: self.testDetails.add_element(element) self.buffered_elements = [] self.write_execution() self.write_test_details() def log_message(self, message): if len(self.scenario_stack) == 0: return element = ReportElement() timestamp = datetime.strptime(message['timestamp'], AbstractReport.ROBOT_FORMAT) element.time = timestamp.strftime(AbstractReport.TIME_FORMAT) element.title = message['message'] if message["level"] == ReportElementStatus.FAILURE: element.set_status("failure") if self.test is not None: self.test.set_status("failure") self.add_report_element(element) def message(self, message): pass def start(self): pass def close(self): if self.testDetails is not None: self.write_test_details() self.write_execution() def write_test_details(self): pass def write_execution(self): pass def get_additional_execution_properties(self): ''' return dictionary that will be added as properties to the execution ''' return {} def add_report_element(self, element): if self.testDetails is None: self.buffered_elements.append(element) else: self.testDetails.add_element(element) self.write_test_details() def add_test_property(self, key, value): self.test.add_property(key, value) self.write_test_details() def add_exeution_property(self, key, value): pass