|
1 | 1 | import pytest |
2 | | -from itertools import chain, islice |
| 2 | +from itertools import chain, islice, repeat |
3 | 3 | from allure_commons.utils import SafeFormatter, md5 |
4 | 4 | from allure_commons.utils import format_exception, format_traceback |
5 | 5 | from allure_commons.model2 import Status |
@@ -123,19 +123,29 @@ def allure_name(item, parameters, param_id=None): |
123 | 123 |
|
124 | 124 | def allure_full_name(item: pytest.Item): |
125 | 125 | 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 "" |
127 | 128 | 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}' |
129 | 130 | return full_name |
130 | 131 |
|
131 | 132 |
|
| 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 | + |
132 | 138 | 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) |
135 | 140 | file_name, path = islice(chain(reversed(head.rsplit('/', 1)), [None]), 2) |
136 | 141 | module = file_name.split('.')[0] |
137 | 142 | 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 | + ) |
139 | 149 | labels = dict(allure_labels(item)) |
140 | 150 | default_suite_labels = [] |
141 | 151 | for label, value in pairs.items(): |
|
0 commit comments