예제 #1
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
예제 #2
0
    def pytest_fixture_setup(self, fixturedef, request):
        fixture_name = fixturedef.argname

        container_uuid = self._cache.get(fixturedef)

        if not container_uuid:
            container_uuid = self._cache.set(fixturedef)
            container = TestResultContainer(uuid=container_uuid)
            self.allure_logger.start_group(container_uuid, container)

        self.allure_logger.update_group(container_uuid, start=now())

        before_fixture_uuid = uuid4()
        before_fixture = TestBeforeResult(name=fixture_name, start=now())
        self.allure_logger.start_before_fixture(container_uuid,
                                                before_fixture_uuid,
                                                before_fixture)

        parameters = allure_parameters(fixturedef, request)
        if parameters:
            test_uuid = self._cache.get(request._pyfuncitem.nodeid)
            parameters = Parameter(**parameters) if parameters else []
            self.allure_logger.update_test(test_uuid, parameters=parameters)

        yield

        self.allure_logger.stop_before_fixture(before_fixture_uuid, stop=now())

        for index, finalizer in enumerate(fixturedef._finalizer or ()):
            name = u'{fixture}::{finalizer}'.format(
                fixture=fixturedef.argname, finalizer=finalizer.__name__)
            fixturedef._finalizer[index] = allure_commons.fixture(
                finalizer, parent_uuid=container_uuid, name=name)
    def pytest_runtest_setup(self, item):
        uuid = self._cache.set(item.nodeid)
        test_result = TestResult(name=item.name, uuid=uuid)
        self.allure_logger.schedule_test(uuid, test_result)

        yield
        uuid = self._cache.get(item.nodeid)
        test_result = self.allure_logger.get_test(uuid)
        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.name = allure_name(item, params)
        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()
        ])
 def start_step(self, uuid, title, params):
     parameters = [
         Parameter(name=name, value=value)
         for name, value in params.items()
     ]
     step = TestStepResult(name=title, start=now(), parameters=parameters)
     self.allure_logger.start_step(None, uuid, step)
예제 #5
0
def get_params(node):
    if hasattr(node, 'callspec'):
        params = node.callspec.params
        return [
            Parameter(name=name, value=value)
            for name, value in params.items()
        ]
예제 #6
0
 def start_step(self, uuid, title, params):
     """start step"""
     step_data = StepData()
     self._cache.push(step_data, uuid)
     parameters = [Parameter(name=name, value=value) for name, value in params.items()]
     step = TestStepResult(name=title, start=now(), parameters=parameters)
     self.allure_logger.start_step(None, uuid, step)
예제 #7
0
 def start_step(self, uuid, title, params):
     with self.lifecycle.start_step() as step:
         step.name = title
         step.start = now()
         step.parameters = [
             Parameter(name=name, value=value)
             for name, value in params.items()
         ]
예제 #8
0
    def pytest_runtest_call(self, item):
        uuid = self._cache.get(item.nodeid)
        for name, value in item.callspec.params.items() if hasattr(item, 'callspec') else ():
            self.allure_logger.update_test(uuid, parameters=Parameter(name, represent(value)))

        self.allure_logger.update_test(uuid, start=now())
        yield
        self.allure_logger.update_test(uuid, stop=now())
예제 #9
0
def _override_allure_test_parameters(item: Function):
    """
    Overrides all pytest parameters in allure report with test ID
    """
    listener = _get_listener_by_item_if_present(item)
    if listener:
        test_result: TestResult = listener.allure_logger.get_test(None)
        test_result.parameters = [Parameter(name="ID", value=item.callspec.id)]
예제 #10
0
    def start_step(self, uuid, title, params):
        def truncate(x):
            if len(x) > 200:
                return x[:180] + " ... " + x[-15:]
            return x

        parameters = [Parameter(name=name, value=truncate(value)) for name, value in params.items()]
        step = TestStepResult(name=title, start=now(), parameters=parameters)
        self.allure_logger.start_step(None, uuid, step)
예제 #11
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=allure_name(item), uuid=uuid)
        self.allure_logger.schedule_test(uuid, test_case)

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

        yield

        for name, value in item.callspec.params.items() if hasattr(
                item, 'callspec') else ():
            test_result = self.allure_logger.get_test(uuid)
            if test_result:
                test_result.parameters.append(Parameter(
                    name, represent(value)))

        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.HOST, value=self._host))
        test_case.labels.append(
            Label(name=LabelType.THREAD, value=self._thread))
        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)
        test_case.historyId = md5(test_case.fullName)
        test_case.labels.append(Label('package', allure_package(item)))

        uuid = self._cache.pop(item.nodeid)
        self.allure_logger.close_test(uuid)
예제 #12
0
    def start_fixture(self, parent_uuid, uuid, name, parameters):
        parameters = [Parameter(name=param_name, value=param_value) for param_name, param_value in parameters.items()]

        if name in FIXTURES and not self.fixture_context:
            group = TestResultContainer(uuid=uuid4())
            self.logger.start_group(group.uuid, group)
            self.fixture_context.append(group)

        if name in BEFORE_FIXTURES:
            fixture = TestBeforeResult(name=name, start=now(), parameters=parameters)
            for group in self.fixture_context:
                self.logger.start_before_fixture(group.uuid, uuid, fixture)

        elif name in AFTER_FIXTURES:
            fixture = TestAfterResult(name=name, start=now(), parameters=parameters)
            for group in self.fixture_context:
                self.logger.start_after_fixture(group.uuid, uuid, fixture)
예제 #13
0
def scenario_parameters(scenario):
    row = scenario._row
    return [
        Parameter(name=name, value=value)
        for name, value in zip(row.headings, row.cells)
    ] if row else None
예제 #14
0
 def _params(names, values):
     return [
         Parameter(name=name, value=represent(value))
         for name, value in zip(names, values)
     ]
def scenario_parameters(scenario, browser):
    row = scenario._row
    return [Parameter(name=name, value=value) for name, value in zip(row.headings, row.cells)] if row else [
        {"name": "browser", "value": browser}]
예제 #16
0
def get_allure_parameters(parameters):
    return [
        Parameter(name="arg{}".format(i + 1), value=param)
        for i, param in enumerate(parameters)
    ]