Ejemplo n.º 1
0
    def start_scenario(self, scenario):
        self.current_scenario_uuid = uuid4()
        self.fixture_context.enter()
        self.execution_context.enter()
        self.execution_context.append(self.current_scenario_uuid)

        test_case = TestResult(uuid=self.current_scenario_uuid, start=now())
        test_case.name = scenario_name(scenario)
        test_case.historyId = scenario_history_id(scenario)
        test_case.description = '\n'.join(scenario.description)
        test_case.parameters = scenario_parameters(scenario)

        issue_pattern = self.behave_config.userdata.get(
            'AllureFormatter.issue_pattern', None)
        link_pattern = self.behave_config.userdata.get(
            'AllureFormatter.link_pattern', None)
        test_case.links.extend(
            scenario_links(scenario,
                           issue_pattern=issue_pattern,
                           link_pattern=link_pattern))
        test_case.labels.extend(scenario_labels(scenario))
        test_case.labels.append(
            Label(name=LabelType.FEATURE, value=scenario.feature.name))
        test_case.labels.append(Label(name=LabelType.FRAMEWORK,
                                      value='behave'))
        test_case.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))

        self.logger.schedule_test(self.current_scenario_uuid, test_case)
Ejemplo n.º 2
0
    def stop_current_test(self, name, attributes):
        uuid = self.stack.pop()
        test = self.reporter.get_test(uuid)
        test.status = utils.get_allure_status(attributes.get('status'))
        test.labels.extend(utils.get_allure_suites(attributes.get('longname')))

        test.labels.extend(allure_tags(attributes))
        for label_type in (LabelType.EPIC, LabelType.FEATURE, LabelType.STORY):
            test.labels.extend(allure_labels(attributes, label_type))
        for link_type in (LinkType.ISSUE, LinkType.TEST_CASE, LinkType.LINK):
            test.links.extend(allure_links(attributes, link_type))
        test.labels.append(Label(name=LabelType.THREAD, value=self.pool_id))
        test.labels.append(Label(name=LabelType.HOST, value=host_tag()))
        test.labels.append(
            Label(name=LabelType.FRAMEWORK, value='robotframework'))
        test.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))
        test.statusDetails = StatusDetails(message=attributes.get('message'),
                                           trace=self.get_traceback_message())
        test.description = attributes.get('doc')
        last_link = list(self.links.values())[-1] if self.links else None
        if attributes.get(Severity.CRITICAL, 'no') == 'yes':
            test.labels.append(
                Label(name=LabelType.SEVERITY, value=Severity.CRITICAL))
        if last_link:
            test.links.append(Link(LinkType.LINK, last_link, 'Link'))
        test.stop = now()
        self.reporter.close_test(uuid)
Ejemplo n.º 3
0
    def start_scenario(self, scenario):
        self.current_scenario_uuid = uuid4()
        test_case = TestResult(uuid=self.current_scenario_uuid, start=now())

        test_case.name = scenario_name(scenario)
        test_case.historyId = scenario_history_id(scenario)
        test_case.description = '\n'.join(scenario.description)

        labels = []
        feature_label = Label(name=LabelType.FEATURE.value,
                              value=scenario.feature.name)
        severity = (Label(name=LabelType.SEVERITY.value,
                          value=scenario_severity(scenario).value))
        labels.append(feature_label)
        labels.append(severity)
        labels += [
            Label(name=LabelType.TAG.value, value=tag)
            for tag in scenario_tags(scenario)
        ]

        test_case.parameters = scenario_parameters(scenario)
        test_case.labels = labels

        self.logger.schedule_test(self.current_scenario_uuid, test_case)
        self.update_group()
Ejemplo n.º 4
0
 def start_test(self, name, uuid, context):
     """start test"""
     test_result = TestResult(name=name, uuid=uuid, start=now(), stop=now())
     test_result.status = context.status
     if self.default_test_suite_name:
         test_result.labels.append(Label(name=LabelType.SUITE, value=self.default_test_suite_name))
     if self.default_parent_test_suite_name:
         test_result.labels.append(Label(name=LabelType.PARENT_SUITE, value=self.default_parent_test_suite_name))
     if self.default_sub_suite_name:
         test_result.labels.append(Label(name=LabelType.SUB_SUITE, value=self.default_sub_suite_name))
     test_result.labels.append(Label(name=LabelType.FRAMEWORK, value="ArangoDB Release Test Automation"))
     self.allure_logger.schedule_test(uuid, test_result)
     self._cache.push(test_result, uuid)
     for label in context.labels:
         test_result.labels.append(label)
     self.allure_logger.update_group(self.container_uuid, children=uuid)
     parent = self.parent_test_listener
     while parent:
         parent.allure_logger.update_group(parent.container_uuid, children=uuid)
         parent = parent.parent_test_listener
     self.current_testcase_container_uuid = str(uuid4())
     container = TestResultContainer(uuid=self.current_testcase_container_uuid, name=name)
     self._cache.push(container, self.current_testcase_container_uuid)
     self.allure_logger.start_group(self.current_testcase_container_uuid, container)
     self.allure_logger.update_group(self.current_testcase_container_uuid, start=now())
     self.allure_logger.update_group(self.current_testcase_container_uuid, children=uuid)
Ejemplo n.º 5
0
    def start_test(self, parent_uuid, uuid, name, parameters, context):
        scenario = context['scenario']
        self.fixture_context.enter()
        self.execution_context.enter()
        self.execution_context.append(uuid)

        test_case = TestResult(uuid=uuid, start=now())
        test_case.name = scenario_name(scenario)
        test_case.historyId = scenario_history_id(scenario)
        test_case.description = '\n'.join(scenario.description)
        test_case.parameters = scenario_parameters(scenario)
        test_case.labels.extend([
            Label(name=LabelType.TAG, value=tag)
            for tag in scenario_tags(scenario)
        ])
        test_case.labels.append(
            Label(name=LabelType.SEVERITY,
                  value=scenario_severity(scenario).value))
        test_case.labels.append(
            Label(name=LabelType.FEATURE, value=scenario.feature.name))
        test_case.labels.append(Label(name=LabelType.FRAMEWORK,
                                      value='behave'))
        test_case.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))

        self.logger.schedule_test(uuid, test_case)
Ejemplo n.º 6
0
    def done(self, status: Status, job_log=None):
        if self.reporter is None:
            return

        self.test_case.status = status

        self.test_case.labels.append(
            Label(name=LabelType.FRAMEWORK, value=self.job.tool))
        self.test_case.labels.append(
            Label(name=LabelType.HOST, value=socket.gethostname()))
        self.test_case.parameters.append(
            Parameter(name="TOOL", value=self.job.tool))

        for l in self.job.labels:
            self.test_case.labels.append(Label(name=l[0], value=l[1]))
        for p in self.job.parameters:
            self.test_case.parameters.append(Parameter(name=p[0], value=p[1]))

        # Record the run variables as test parameters
        for k, v in self.job.runvars.items():
            self.test_case.parameters.append(Parameter(name=k, value=v))

        # Record the seed as a test parameter
        self.test_case.parameters.append(
            Parameter(name="SEED", value=str(self.job.seed)))

        if job_log is not None:
            self.reporter.attach_file(uuid4(), job_log, "job.log")
        for a in self.job.attachments:
            pass

        self.test_case.stop = now()
        self.reporter.close_test(self.test_uuid)

        pass
Ejemplo n.º 7
0
    def pytest_runtest_protocol(self, item, nextitem):
        uuid = self._cache.set(item.nodeid)
        for fixturedef in _test_fixtures(item):
            group_uuid = self._cache.get(fixturedef)
            if not group_uuid:
                group_uuid = self._cache.set(fixturedef)
                group = TestResultContainer(uuid=group_uuid)
                self.allure_logger.start_group(group_uuid, group)
            self.allure_logger.update_group(group_uuid, children=uuid)

        test_case = TestResult(name=item.name, uuid=uuid)
        self.allure_logger.schedule_test(uuid, test_case)

        yield

        test_case.labels += [
            Label(name, value) for name, value in allure_labels(item)
        ]
        test_case.links += [
            Link(link_type, url, name)
            for link_type, url, name in allure_links(item)
        ]
        test_case.labels += [
            Label(LabelType.TAG, value) for value in pytest_markers(item)
        ]

        test_case.fullName = allure_full_name(item.nodeid)
        test_case.historyId = md5(test_case.fullName)
        test_case.labels.append(Label('package', allure_package(item.nodeid)))

        uuid = self._cache.pop(item.nodeid)
        self.allure_logger.close_test(uuid)
 def pytest_runtest_teardown(self, item):
     yield
     uuid = self._cache.get(item.nodeid)
     test_result = self.allure_logger.get_test(uuid)
     test_result.labels.extend([
         Label(name=name, value=value)
         for name, value in allure_labels(item)
     ])
     test_result.labels.extend([
         Label(name=LabelType.TAG, value=value)
         for value in pytest_markers(item)
     ])
     test_result.labels.extend([
         Label(name=LabelType.TAG, value=value)
         for value in pytest_markers(item)
     ])
     test_result.labels.extend([
         Label(name=name, value=value)
         for name, value in allure_suite_labels(item)
     ])
     test_result.labels.append(Label(name=LabelType.HOST, value=self._host))
     test_result.labels.append(
         Label(name=LabelType.THREAD, value=self._thread))
     test_result.labels.append(
         Label(name=LabelType.FRAMEWORK, value='pytest'))
     test_result.labels.append(
         Label(name=LabelType.LANGUAGE, value=platform_label()))
     test_result.labels.append(
         Label(name='package', value=allure_package(item)))
     test_result.links.extend([
         Link(link_type, url, name)
         for link_type, url, name in allure_links(item)
     ])
Ejemplo n.º 9
0
def parse_tag(tag, issue_pattern=None, link_pattern=None):
    """
    >>> parse_tag("blocker")
    Label(name='severity', value='blocker')

    >>> parse_tag("allure.issue:http://example.com/BUG-42")
    Link(type='issue', url='http://example.com/BUG-42', name='http://example.com/BUG-42')

    >>> parse_tag("allure.link.home:http://qameta.io")
    Link(type='link', url='http://qameta.io', name='home')

    >>> parse_tag("allure.suite:mapping")
    Label(name='suite', value='mapping')

    >>> parse_tag("allure.suite:mapping")
    Label(name='suite', value='mapping')

    >>> parse_tag("allure.label.owner:me")
    Label(name='owner', value='me')

    >>> parse_tag("foo.label:1")
    Label(name='tag', value='foo.label:1')

    >>> parse_tag("allure.foo:1")
    Label(name='tag', value='allure.foo:1')
    """
    sep = allure_tag_sep(tag)
    schema, value = islice(chain(tag.split(sep, 1), [None]), 2)
    prefix, kind, name = islice(chain(schema.split('.'), [None], [None]), 3)

    if tag in [severity for severity in Severity]:
        return Label(name=LabelType.SEVERITY, value=tag)

    if prefix == TAG_PREFIX and value is not None:

        if __is(kind, LinkType):
            if issue_pattern and kind == "issue" and not value.startswith(
                    "http"):
                value = issue_pattern.format(value)
            if link_pattern and kind == "link" and not value.startswith(
                    "http"):
                value = link_pattern.format(value)
            return Link(type=kind, name=name or value, url=value)

        if __is(kind, LabelType):
            return Label(name=kind, value=value)

        if kind == "id":
            return Label(name=LabelType.ID, value=value)

        if kind == "label" and name is not None:
            return Label(name=name, value=value)

    return Label(name=LabelType.TAG, value=tag)
Ejemplo n.º 10
0
    def _build_testcase_name(self):
        elems = self.job.fullname.split('.')

        if len(elems) > 4:
            # When we more elements in the qualified name than
            # will fit in the PARENT::SUITE::SUBSUITE scheme.
            #
            # We do a bit of middle compression to maximize
            # readability.

            collapse_root = True

            if collapse_root:
                # Collapse leaf elements

                root = ""
                for i, e in enumerate(elems[:-4]):
                    if i > 0:
                        root += "."
                    root += e

#                print("root=%s suite=%s sub_suite=%s" % (root, elems[-3], elems[-2]))
                self.test_case.labels.append(
                    Label(name=LabelType.PARENT_SUITE, value=root))
                self.test_case.labels.append(
                    Label(name=LabelType.SUITE, value=elems[-3]))
                self.test_case.labels.append(
                    Label(name=LabelType.SUB_SUITE, value=elems[-2]))
                self.test_case.name = elems[-1]
            else:
                # Collapse leaf elements
                self.test_case.labels.append(
                    Label(name=LabelType.PARENT_SUITE, value=elems[0]))
                self.test_case.labels.append(
                    Label(name=LabelType.SUITE, value=elems[1]))
                self.test_case.labels.append(
                    Label(name=LabelType.SUB_SUITE, value=elems[2]))

                subsuite = ""
                for i, e in enumerate(elems[3:]):
                    if i > 0:
                        subsuite += "."
                    subsuite += e
                self.test_case.name = subsuite
        else:
            self.test_case.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=elems[0]))

            if len(elems) > 1:
                self.test_case.labels.append(
                    Label(name=LabelType.SUITE, value=elems[1]))

            if len(elems) > 2:
                self.test_case.labels.append(
                    Label(name=LabelType.SUB_SUITE, value=elems[2]))
            self.test_case.name = self.job.name
Ejemplo n.º 11
0
    def pytest_bdd_before_scenario(self, request, feature, scenario):
        uuid = get_uuid(request.node.nodeid)
        full_name = get_full_name(feature, scenario)
        name = get_name(request.node, scenario)
        with self.lifecycle.schedule_test_case(uuid=uuid) as test_result:
            test_result.fullName = full_name
            test_result.name = name
            test_result.start = now()
            test_result.labels.append(Label(name=LabelType.HOST, value=self.host))
            test_result.labels.append(Label(name=LabelType.THREAD, value=self.thread))
            test_result.labels.append(Label(name=LabelType.FRAMEWORK, value="pytest-bdd"))
            test_result.labels.append(Label(name=LabelType.LANGUAGE, value=platform_label()))
            test_result.labels.append(Label(name=LabelType.FEATURE, value=feature.name))
            test_result.parameters = get_params(request.node)

        finalizer = partial(self._scenario_finalizer, scenario)
        request.node.addfinalizer(finalizer)
Ejemplo n.º 12
0
    def _record_suite_labels(self, test_result, test_index, test_data, job):
        tool_id = None
        index_match = WORKFLOW_INDEX_MATCH.match(test_index)
        if "tool_id" in test_data:
            tool_id = test_data["tool_id"]
            test_result.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=tool_id))
        elif "tool_id" in job:
            tool_id = job["tool_id"]
            test_result.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=tool_id))
        elif index_match:
            test_result.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=index_match.group(1)))

        if "tool_version" in test_data:
            test_result.labels.append(
                Label(name=LabelType.SUITE, value=test_data["tool_version"]))
        elif "tool_version" in job:
            test_result.labels.append(
                Label(name=LabelType.SUITE, value=job["tool_version"]))

        if "test_index" in test_data:
            test_result.labels.append(
                Label(name=LabelType.SUB_SUITE,
                      value=str(test_data["test_index"])))
        elif index_match:
            test_result.labels.append(
                Label(name=LabelType.SUB_SUITE, value=index_match.group(2)))

        return tool_id
Ejemplo n.º 13
0
 def startTest(self, event):
     if self.is_registered():
         with self.lifecycle.schedule_test_case() as test_result:
             test_result.name = name(event)
             test_result.start = timestamp_millis(event.startTime)
             test_result.fullName = fullname(event)
             test_result.testCaseId = md5(test_result.fullName)
             test_result.historyId = md5(event.test.id())
             test_result.labels.extend(labels(event.test))
             test_result.labels.append(
                 Label(name=LabelType.HOST, value=self._host))
             test_result.labels.append(
                 Label(name=LabelType.THREAD, value=self._thread))
             test_result.labels.append(
                 Label(name=LabelType.FRAMEWORK, value='nose2'))
             test_result.labels.append(
                 Label(name=LabelType.LANGUAGE, value=platform_label()))
             test_result.parameters = params(event)
Ejemplo n.º 14
0
def get_allure_suites(longname):
    """
    >>> get_allure_suites('Suite1.Test')
    [Label(name='suite', value='Suite1')]
    >>> get_allure_suites('Suite1.Suite2.Test') # doctest: +NORMALIZE_WHITESPACE
    [Label(name='suite', value='Suite1'), Label(name='subSuite', value='Suite2')]
    >>> get_allure_suites('Suite1.Suite2.Suite3.Test') # doctest: +NORMALIZE_WHITESPACE
    [Label(name='parentSuite', value='Suite1'),
    Label(name='suite', value='Suite2'),
    Label(name='subSuite', value='Suite3')]
    """
    labels = []
    suites = longname.split('.')
    if len(suites) > 3:
        labels.append(Label(LabelType.PARENT_SUITE, suites.pop(0)))
    labels.append(Label(LabelType.SUITE, suites.pop(0)))
    if len(suites) > 1:
        labels.append(Label(LabelType.SUB_SUITE, '.'.join(suites[:-1])))
    return labels
Ejemplo n.º 15
0
def allure_labels(attributes, prefix):
    tags = attributes.get('tags', ())

    def is_label(label):
        return label.startswith("{label}:".format(label=prefix))

    def label_value(label):
        return label.split(':')[1] or 'unknown'

    return [Label(name=prefix, value=label_value(tag)) for tag in tags if is_label(tag)]
Ejemplo n.º 16
0
 def stop_current_test(self, name, attributes):
     uuid = self.stack.pop()
     test = self.reporter.get_test(uuid)
     test.status = utils.get_allure_status(attributes.get('status'))
     test.labels.extend(utils.get_allure_suites(attributes.get('longname')))
     test.labels.extend(utils.get_allure_tags(attributes.get('tags')))
     test.labels.append(utils.get_allure_thread(self.pool_id))
     test.labels.append(Label(LabelType.HOST, value=host_tag()))
     test.labels.append(
         Label(name=LabelType.FRAMEWORK, value='robotframework'))
     test.labels.append(
         Label(name=LabelType.LANGUAGE, value=platform_label()))
     test.statusDetails = StatusDetails(message=attributes.get('message'))
     test.description = attributes.get('doc')
     last_link = list(self.links.values())[-1] if self.links else None
     if last_link:
         test.links.append(Link(LinkType.LINK, last_link, 'Link'))
     test.stop = now()
     self.reporter.close_test(uuid)
Ejemplo n.º 17
0
    def pytest_runtest_protocol(self, item, nextitem):
        uuid = self._cache.set(item.nodeid)
        for fixturedef in _test_fixtures(item):
            group_uuid = self._cache.get(fixturedef)
            if not group_uuid:
                group_uuid = self._cache.set(fixturedef)
                group = TestResultContainer(uuid=group_uuid)
                self.allure_logger.start_group(group_uuid, group)
            self.allure_logger.update_group(group_uuid, children=uuid)

        test_case = TestResult(name=item.name, uuid=uuid)
        self.allure_logger.schedule_test(uuid, test_case)

        if hasattr(item, 'function'):
            test_case.description = item.function.__doc__

        yield

        test_case.labels.extend([
            Label(name=name, value=value)
            for name, value in allure_labels(item)
        ])
        test_case.labels.extend([
            Label(name=LabelType.TAG, value=value)
            for value in pytest_markers(item)
        ])
        test_case.labels.append(Label(name=LabelType.FRAMEWORK,
                                      value='pytest'))
        test_case.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))

        test_case.links += [
            Link(link_type, url, name)
            for link_type, url, name in allure_links(item)
        ]

        test_case.fullName = allure_full_name(item.nodeid)
        test_case.historyId = md5(test_case.fullName)
        test_case.labels.append(Label('package', allure_package(item.nodeid)))

        uuid = self._cache.pop(item.nodeid)
        self.allure_logger.close_test(uuid)
Ejemplo n.º 18
0
    def stop_test(self, _, attributes, messages):
        self._report_messages(messages)

        if 'skipped' in [tag.lower() for tag in attributes['tags']]:
            attributes['status'] = RobotStatus.SKIPPED

        with self.lifecycle.update_test_case() as test_result:
            test_result.stop = now()
            test_result.description = attributes.get('doc')
            test_result.status = get_allure_status(attributes.get('status'))
            test_result.labels.extend(
                get_allure_suites(attributes.get('longname')))
            test_result.labels.append(
                Label(name=LabelType.FRAMEWORK, value='robotframework'))
            test_result.labels.append(
                Label(name=LabelType.LANGUAGE, value=self._platform))
            test_result.labels.append(
                Label(name=LabelType.HOST, value=self._host))
            test_result.labels.append(
                Label(name=LabelType.THREAD, value=pool_id()))
            test_result.labels.extend(allure_tags(attributes))
            test_result.statusDetails = StatusDetails(
                message=self._current_msg or attributes.get('message'),
                trace=self._current_tb)

            if attributes.get('critical') == 'yes':
                test_result.labels.append(
                    Label(name=LabelType.SEVERITY, value=Severity.CRITICAL))

            for label_type in (LabelType.EPIC, LabelType.FEATURE,
                               LabelType.STORY):
                test_result.labels.extend(allure_labels(
                    attributes, label_type))

            for link_type in (LinkType.ISSUE, LinkType.TEST_CASE,
                              LinkType.LINK):
                test_result.links.extend(allure_links(attributes, link_type))

        self._current_tb, self._current_msg = None, None
Ejemplo n.º 19
0
    def _record_suite_labels(self, test_result, test_data, job):
        tool_id = None
        if "tool_id" in test_data:
            tool_id = test_data["tool_id"]
            test_result.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=tool_id))
        elif "tool_id" in job:
            tool_id = job["tool_id"]
            test_result.labels.append(
                Label(name=LabelType.PARENT_SUITE, value=tool_id))

        if "tool_version" in test_data:
            test_result.labels.append(
                Label(name=LabelType.SUITE, value=test_data["tool_version"]))
        elif "tool_version" in job:
            test_result.labels.append(
                Label(name=LabelType.SUITE, value=job["tool_version"]))

        if "test_index" in test_data:
            test_result.labels.append(
                Label(name=LabelType.SUB_SUITE,
                      value=str(test_data["test_index"])))
        return tool_id
Ejemplo n.º 20
0
    def start_test(self, parent_uuid, uuid, name, parameters, context):
        scenario = context['scenario']
        self.fixture_context.enter()
        self.execution_context.enter()
        self.execution_context.append(uuid)

        test_case = TestResult(uuid=uuid, start=now())

        test_case.name = scenario_name(scenario)
        test_case.historyId = scenario_history_id(scenario)
        test_case.description = '\n'.join(scenario.description)

        labels = []
        feature_label = Label(name=LabelType.FEATURE.value, value=scenario.feature.name)
        severity = (Label(name=LabelType.SEVERITY.value, value=scenario_severity(scenario).value))
        labels.append(feature_label)
        labels.append(severity)
        labels += [Label(name=LabelType.TAG.value, value=tag) for tag in scenario_tags(scenario)]

        test_case.parameters = scenario_parameters(scenario)
        test_case.labels = labels

        self.logger.schedule_test(uuid, test_case)
Ejemplo n.º 21
0
    def start_scenario(self, scenario):
        self.current_scenario_uuid = uuid4()
        self.group_context.enter()

        test_case = TestResult(uuid=self.current_scenario_uuid, start=now())
        test_case.name = scenario_name(scenario)
        test_case.fullName = get_fullname(scenario)
        test_case.historyId = scenario_history_id(scenario)
        test_case.description = '\n'.join(scenario.description)
        test_case.parameters = scenario_parameters(scenario)

        test_case.links.extend(
            scenario_links(scenario,
                           issue_pattern=self.issue_pattern,
                           link_pattern=self.link_pattern))
        test_case.labels.extend(scenario_labels(scenario))
        test_case.labels.append(
            Label(name=LabelType.FEATURE, value=scenario.feature.name))
        test_case.labels.append(Label(name=LabelType.FRAMEWORK,
                                      value='behave'))
        test_case.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))

        self.logger.schedule_test(self.current_scenario_uuid, test_case)
Ejemplo n.º 22
0
    def pytest_runtest_protocol(self, item, nextitem):
        uuid = self._cache.set(item.nodeid)
        for fixturedef in _test_fixtures(item):
            group_uuid = self._cache.get(fixturedef)
            if not group_uuid:
                group_uuid = self._cache.set(fixturedef)
                group = TestResultContainer(uuid=group_uuid)
                self.allure_logger.start_group(group_uuid, group)
            self.allure_logger.update_group(group_uuid, children=uuid)

        params = item.callspec.params if hasattr(item, 'callspec') else {}

        test_result = TestResult(name=allure_name(item, params), uuid=uuid)
        test_result.description = allure_description(item)
        test_result.descriptionHtml = allure_description_html(item)
        test_result.fullName = allure_full_name(item)
        test_result.historyId = md5(test_result.fullName)
        test_result.parameters.extend([
            Parameter(name=name, value=represent(value))
            for name, value in params.items()
        ])

        self.allure_logger.schedule_test(uuid, test_result)

        yield

        test_result.labels.extend([
            Label(name=name, value=value)
            for name, value in allure_labels(item)
        ])
        test_result.labels.extend([
            Label(name=LabelType.TAG, value=value)
            for value in pytest_markers(item)
        ])
        test_result.labels.append(Label(name=LabelType.HOST, value=self._host))
        test_result.labels.append(
            Label(name=LabelType.THREAD, value=self._thread))
        test_result.labels.append(
            Label(name=LabelType.FRAMEWORK, value='pytest'))
        test_result.labels.append(
            Label(name=LabelType.LANGUAGE, value=platform_label()))
        test_result.labels.append(
            Label(name='package', value=allure_package(item)))
        test_result.links.extend([
            Link(link_type, url, name)
            for link_type, url, name in allure_links(item)
        ])

        uuid = self._cache.pop(item.nodeid)
        self.allure_logger.close_test(uuid)
Ejemplo n.º 23
0
def labels(test):
    def _get_attrs(obj, keys):
        pairs = set()
        for key in keys:
            values = getattr(obj, key, ())
            for value in (values, ) if type(values) == str else values:
                pairs.add((key, value))
        return pairs

    keys = ALLURE_LABELS
    pairs = _get_attrs(test, keys)

    if hasattr(test, "_testFunc"):
        pairs.update(_get_attrs(test._testFunc, keys))
    elif hasattr(test, "_testMethodName"):
        test_method = getattr(test, test._testMethodName)
        pairs.update(_get_attrs(test_method, keys))
    return [Label(name=name, value=value) for name, value in pairs]
 def add_label(self, label_type, labels):
     test_result = self.allure_logger.get_test(None)
     for label in labels if test_result else ():
         test_result.labels.append(Label(label_type, label))
def scenario_labels(scenario):
    tags = scenario.feature.tags + scenario.tags
    default_labels = [Label(name=LabelType.SEVERITY, value=Severity.NORMAL)]
    parsed = [parse_tag(item) for item in tags]
    return labels_set(
        list(filter(lambda x: isinstance(x, Label), default_labels + parsed)))
Ejemplo n.º 26
0
def get_allure_thread(pool_id):
    return Label(LabelType.THREAD, 'Thread #{number}'.format(number=pool_id))
Ejemplo n.º 27
0
def get_allure_tags(tags):
    return [Label(LabelType.TAG, tag) for tag in tags]
Ejemplo n.º 28
0
 def add_label(self, label_type, labels):
     for label in labels:
         self.allure_logger.update_test(None,
                                        labels=Label(label_type, label))
Ejemplo n.º 29
0
def allure_tags(attributes):
    return [
        Label(LabelType.TAG, tag) for tag in attributes.get('tags', ())
        if not allure_tag_sep(tag)
    ]
Ejemplo n.º 30
0
 def add_label(self, label_type, labels):
     with self.lifecycle.update_test_case() as case:
         for label in labels if case else ():
             case.labels.append(Label(label_type, label))