forked from allure-framework/allure-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
50 lines (36 loc) · 1.49 KB
/
utils.py
File metadata and controls
50 lines (36 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
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.model2 import Parameter
from allure_commons.utils import format_exception
def get_step_name(step):
return f"{step.keyword} {step.name}"
def get_name(node, scenario):
if hasattr(node, 'callspec'):
parts = node.nodeid.rsplit("[")
params = parts[-1]
return f"{scenario.name} [{params}"
return scenario.name
def get_full_name(feature, scenario):
feature_path = os.path.normpath(feature.rel_filename)
return f"{feature_path}:{scenario.name}"
def get_uuid(*args):
return str(UUID(md5(*args)))
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
def get_params(node):
if hasattr(node, 'callspec'):
params = dict(node.callspec.params)
outline_params = params.pop('_pytest_bdd_example', {})
params.update(outline_params)
return [Parameter(name=name, value=value) for name, value in params.items()]