Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions allure-pytest-bdd/src/pytest_bdd_listener.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
from .utils import get_uuid
from .utils import get_step_name
from .utils import get_status_details
from .utils import get_pytest_report_status
from allure_commons.model2 import StatusDetails
from functools import partial, reduce
from functools import partial
from allure_commons.lifecycle import AllureLifecycle
from .utils import get_full_name

Expand Down Expand Up @@ -84,8 +85,7 @@ def pytest_bdd_step_func_lookup_error(self, request, feature, scenario, step, ex
def pytest_runtest_makereport(self, item, call):
report = (yield).get_result()

status = reduce(lambda final_status, current_status: final_status or getattr(report, current_status, None),
["failed", "passed", "skipped"])
status = get_pytest_report_status(report)

status_details = StatusDetails(
message=call.excinfo.exconly(),
Expand Down
9 changes: 9 additions & 0 deletions allure-pytest-bdd/src/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from uuid import UUID
from allure_commons.utils import md5
from allure_commons.model2 import StatusDetails
from allure_commons.model2 import Status
from allure_commons.utils import format_exception


Expand All @@ -22,3 +23,11 @@ def get_status_details(exception):
message = str(exception)
trace = format_exception(type(exception), exception)
return StatusDetails(message=message, trace=trace) if message or trace else None


def get_pytest_report_status(pytest_report):
pytest_statuses = ('failed', 'passed', 'skipped')
statuses = (Status.FAILED, Status.PASSED, Status.SKIPPED)
for pytest_status, status in zip(pytest_statuses, statuses):
if getattr(pytest_report, pytest_status):
return status