예제 #1
0
 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()))
예제 #2
0
 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())
예제 #3
0
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