Skip to content

Commit 1d385e4

Browse files
committed
fix(pytest): nested casses break some props
1 parent 25a0292 commit 1d385e4

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

allure-pytest/src/utils.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pytest
2-
from itertools import chain, islice
2+
from itertools import chain, islice, repeat
33
from allure_commons.utils import SafeFormatter, md5
44
from allure_commons.utils import format_exception, format_traceback
55
from allure_commons.model2 import Status
@@ -123,19 +123,29 @@ def allure_name(item, parameters, param_id=None):
123123

124124
def allure_full_name(item: pytest.Item):
125125
package = allure_package(item)
126-
class_name = f".{item.parent.name}" if isinstance(item.parent, pytest.Class) else ''
126+
class_names = item.nodeid.split("::")[1:-1]
127+
class_part = ("." + ".".join(class_names)) if class_names else ""
127128
test = item.originalname if isinstance(item, pytest.Function) else item.name.split("[")[0]
128-
full_name = f'{package}{class_name}#{test}'
129+
full_name = f'{package}{class_part}#{test}'
129130
return full_name
130131

131132

133+
def ensure_len(value, min_length, fill_value=None):
134+
yield from value
135+
yield from repeat(fill_value, min_length - len(value))
136+
137+
132138
def allure_suite_labels(item):
133-
head, possibly_clazz, tail = islice(chain(item.nodeid.split('::'), [None], [None]), 3)
134-
clazz = possibly_clazz if tail else None
139+
head, *class_names, _ = ensure_len(item.nodeid.split("::"), 2)
135140
file_name, path = islice(chain(reversed(head.rsplit('/', 1)), [None]), 2)
136141
module = file_name.split('.')[0]
137142
package = path.replace('/', '.') if path else None
138-
pairs = dict(zip([LabelType.PARENT_SUITE, LabelType.SUITE, LabelType.SUB_SUITE], [package, module, clazz]))
143+
pairs = dict(
144+
zip(
145+
[LabelType.PARENT_SUITE, LabelType.SUITE, LabelType.SUB_SUITE],
146+
[package, module, " > ".join(class_names)],
147+
),
148+
)
139149
labels = dict(allure_labels(item))
140150
default_suite_labels = []
141151
for label, value in pairs.items():

0 commit comments

Comments
 (0)