Skip to content

Commit 6912b3c

Browse files
authored
default suite labels (fixes #197 via #275)
1 parent 40d0910 commit 6912b3c

File tree

8 files changed

+69
-10
lines changed

8 files changed

+69
-10
lines changed

allure-pytest/src/listener.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from allure_pytest.utils import allure_description, allure_description_html
1919
from allure_pytest.utils import allure_labels, allure_links, pytest_markers
2020
from allure_pytest.utils import allure_full_name, allure_package, allure_name
21+
from allure_pytest.utils import allure_suite_labels
2122
from allure_pytest.utils import get_status, get_status_details
2223
from allure_pytest.utils import get_outcome_status, get_outcome_status_details
2324
from allure_pytest.utils import get_pytest_report_status
@@ -100,6 +101,8 @@ def pytest_runtest_teardown(self, item):
100101
test_result = self.allure_logger.get_test(uuid)
101102
test_result.labels.extend([Label(name=name, value=value) for name, value in allure_labels(item)])
102103
test_result.labels.extend([Label(name=LabelType.TAG, value=value) for value in pytest_markers(item)])
104+
test_result.labels.extend([Label(name=LabelType.TAG, value=value) for value in pytest_markers(item)])
105+
test_result.labels.extend([Label(name=name, value=value) for name, value in allure_suite_labels(item)])
103106
test_result.labels.append(Label(name=LabelType.HOST, value=self._host))
104107
test_result.labels.append(Label(name=LabelType.THREAD, value=self._thread))
105108
test_result.labels.append(Label(name=LabelType.FRAMEWORK, value='pytest'))

allure-pytest/src/utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
import six
55
import pytest
6+
from itertools import chain, islice
67
from allure_commons.utils import represent
78
from allure_commons.utils import format_exception, format_traceback, escape_non_unicode_symbols
89
from allure_commons.model2 import Status
910
from allure_commons.model2 import StatusDetails
11+
from allure_commons.types import LabelType
1012

1113
ALLURE_TITLE = 'allure_title'
1214
ALLURE_DESCRIPTION = 'allure_description'
@@ -99,6 +101,16 @@ def allure_full_name(item):
99101
return escape_name(full_name)
100102

101103

104+
def allure_suite_labels(item):
105+
head, possibly_clazz, tail = islice(chain(item.nodeid.split('::'), [None]), 3)
106+
clazz = possibly_clazz if tail else None
107+
file_name, path = islice(chain(reversed(head.rsplit('/', 1)), [None]), 2)
108+
module = file_name.split('.')[0]
109+
package = path.replace('/', '.')
110+
pairs = zip([LabelType.PARENT_SUITE, LabelType.SUITE, LabelType.SUB_SUITE], [package, module, clazz])
111+
return [(name, value) for name, value in pairs if value is not None]
112+
113+
102114
def escape_name(name):
103115
if six.PY2:
104116
try:

allure-pytest/test/labels/suite/__init__.py

Whitespace-only changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class TestSuiteClass(object):
2+
3+
def test_default_suite_class_method(self):
4+
"""
5+
>>> allure_report = getfixture('allure_report')
6+
>>> assert_that(allure_report,
7+
... has_test_case('test_default_suite_class_method',
8+
... has_parent_suite('test.labels.suite'),
9+
... has_suite('class_suite_test'),
10+
... has_sub_suite('TestSuiteClass')
11+
... )
12+
... )
13+
14+
"""
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
def test_default_suite_function():
2+
"""
3+
>>> from hamcrest import not_, anything
4+
>>> allure_report = getfixture('allure_report')
5+
>>> assert_that(allure_report,
6+
... has_test_case('test_default_suite_function',
7+
... has_parent_suite('test.labels.suite'),
8+
... has_suite('function_suite_test'),
9+
... not_(has_sub_suite(anything()))
10+
... )
11+
... )
12+
13+
"""
14+
pass

allure-python-commons-test/src/label.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,15 @@ def has_tag(tag):
3434

3535
def has_package(package):
3636
return has_label('package', package)
37+
38+
39+
def has_suite(suite):
40+
return has_label('suite', suite)
41+
42+
43+
def has_parent_suite(parent_suite):
44+
return has_label('parentSuite', parent_suite)
45+
46+
47+
def has_sub_suite(sub_suite):
48+
return has_label('subSuite', sub_suite)

allure-python-commons/src/types.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class LabelType(str, Enum):
2121
EPIC = 'epic'
2222
FEATURE = 'feature'
2323
STORY = 'story'
24+
PARENT_SUITE = 'parentSuite'
25+
SUITE = 'suite'
26+
SUB_SUITE = 'subSuite'
2427
SEVERITY = 'severity'
2528
THREAD = 'thread'
2629
HOST = 'host'

allure-robotframework/src/listener/utils.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,22 @@ def get_allure_parameters(parameters):
1515
def get_allure_suites(longname):
1616
"""
1717
>>> get_allure_suites('Suite1.Test')
18-
[Label(name='suite', value='Suite1')]
19-
>>> get_allure_suites('Suite1.Suite2.Test')
20-
[Label(name='suite', value='Suite1'), Label(name='subSuite', value='Suite2')]
21-
>>> get_allure_suites('Suite1.Suite2.Suite3.Test') # doctest: +NORMALIZE_WHITESPACE
22-
[Label(name='parentSuite', value='Suite1'),
23-
Label(name='suite', value='Suite2'),
24-
Label(name='subSuite', value='Suite3')]
18+
[Label(name=<LabelType.SUITE: 'suite'>, value='Suite1')]
19+
>>> get_allure_suites('Suite1.Suite2.Test') # doctest: +NORMALIZE_WHITESPACE
20+
[Label(name=<LabelType.SUITE: 'suite'>, value='Suite1'),
21+
Label(name=<LabelType.SUB_SUITE: 'subSuite'>, value='Suite2')]
22+
>>> get_allure_suites('Suite1.Suite2.Suite3.Test') # doctest: +NORMALIZE_WHITESPACE
23+
[Label(name=<LabelType.PARENT_SUITE: 'parentSuite'>, value='Suite1'),
24+
Label(name=<LabelType.SUITE: 'suite'>, value='Suite2'),
25+
Label(name=<LabelType.SUB_SUITE: 'subSuite'>, value='Suite3')]
2526
"""
2627
labels = []
2728
suites = longname.split('.')
2829
if len(suites) > 3:
29-
labels.append(Label('parentSuite', suites.pop(0)))
30-
labels.append(Label('suite', suites.pop(0)))
30+
labels.append(Label(LabelType.PARENT_SUITE, suites.pop(0)))
31+
labels.append(Label(LabelType.SUITE, suites.pop(0)))
3132
if len(suites) > 1:
32-
labels.append(Label('subSuite', '.'.join(suites[:-1])))
33+
labels.append(Label(LabelType.SUB_SUITE, '.'.join(suites[:-1])))
3334
return labels
3435

3536

0 commit comments

Comments
 (0)