Skip to content

Commit 1888fea

Browse files
authored
fix pytest markers warning (fixes #381 via #397)
2 parents 1a79382 + 7d11e57 commit 1888fea

File tree

4 files changed

+43
-39
lines changed

4 files changed

+43
-39
lines changed

allure-pytest/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
]
2727

2828
install_requires = [
29-
"pytest>=3.4.0",
29+
"pytest>=4.5.0",
3030
"six>=1.9.0",
3131
"allure-python-commons==2.6.5"
3232
]

allure-pytest/src/helper.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
import pytest
55
import allure_commons
6-
from allure_pytest.utils import ALLURE_TITLE
7-
from allure_pytest.utils import ALLURE_DESCRIPTION, ALLURE_DESCRIPTION_HTML
8-
from allure_pytest.utils import ALLURE_LABEL_PREFIX, ALLURE_LINK_PREFIX
6+
from allure_pytest.utils import ALLURE_DISPLAY_NAME_MARK
7+
from allure_pytest.utils import ALLURE_DESCRIPTION_MARK, ALLURE_DESCRIPTION_HTML_MARK
8+
from allure_pytest.utils import ALLURE_LABEL_MARK, ALLURE_LINK_MARK
99

1010

1111
class AllureTestHelper(object):
@@ -15,34 +15,28 @@ def __init__(self, config):
1515

1616
@allure_commons.hookimpl
1717
def decorate_as_title(self, test_title):
18-
allure_title = getattr(pytest.mark, ALLURE_TITLE)
18+
allure_title = getattr(pytest.mark, ALLURE_DISPLAY_NAME_MARK)
1919
return allure_title(test_title)
2020

2121
@allure_commons.hookimpl
2222
def decorate_as_description(self, test_description):
23-
allure_description = getattr(pytest.mark, ALLURE_DESCRIPTION)
23+
allure_description = getattr(pytest.mark, ALLURE_DESCRIPTION_MARK)
2424
return allure_description(test_description)
2525

2626
@allure_commons.hookimpl
2727
def decorate_as_description_html(self, test_description_html):
28-
allure_description_html = getattr(pytest.mark, ALLURE_DESCRIPTION_HTML)
28+
allure_description_html = getattr(pytest.mark, ALLURE_DESCRIPTION_HTML_MARK)
2929
return allure_description_html(test_description_html)
3030

3131
@allure_commons.hookimpl
3232
def decorate_as_label(self, label_type, labels):
33-
allure_label_marker = '{prefix}.{label_type}'.format(prefix=ALLURE_LABEL_PREFIX, label_type=label_type)
34-
allure_label = getattr(pytest.mark, allure_label_marker)
33+
allure_label = getattr(pytest.mark, ALLURE_LABEL_MARK)
3534
return allure_label(*labels, label_type=label_type)
3635

3736
@allure_commons.hookimpl
3837
def decorate_as_link(self, url, link_type, name):
39-
allure_link_marker = '{prefix}.{link_type}:{postfix}'.format(
40-
prefix=ALLURE_LINK_PREFIX,
41-
link_type=link_type,
42-
postfix=url
43-
)
4438
pattern = dict(self.config.option.allure_link_pattern).get(link_type, u'{}')
4539
url = pattern.format(url)
46-
allure_link = getattr(pytest.mark, allure_link_marker)
40+
allure_link = getattr(pytest.mark, ALLURE_LINK_MARK)
4741
name = url if name is None else name
4842
return allure_link(url, name=name, link_type=link_type)

allure-pytest/src/plugin.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
from allure_pytest.helper import AllureTestHelper
1212
from allure_pytest.listener import AllureListener
1313

14+
from allure_pytest.utils import ALLURE_DISPLAY_NAME_MARK
15+
from allure_pytest.utils import ALLURE_DESCRIPTION_MARK, ALLURE_DESCRIPTION_HTML_MARK
16+
from allure_pytest.utils import ALLURE_LABEL_MARK, ALLURE_LINK_MARK
17+
1418

1519
def pytest_addoption(parser):
1620
parser.getgroup("reporting").addoption('--alluredir',
@@ -126,6 +130,12 @@ def pytest_configure(config):
126130
allure_commons.plugin_manager.register(file_logger)
127131
config.add_cleanup(cleanup_factory(file_logger))
128132

133+
config.addinivalue_line("markers", "{mark}: allure label marker".format(mark=ALLURE_LABEL_MARK))
134+
config.addinivalue_line("markers", "{mark}: allure link marker".format(mark=ALLURE_LINK_MARK))
135+
config.addinivalue_line("markers", "{mark}: allure test name marker".format(mark=ALLURE_DISPLAY_NAME_MARK))
136+
config.addinivalue_line("markers", "{mark}: allure description".format(mark=ALLURE_DESCRIPTION_MARK))
137+
config.addinivalue_line("markers", "{mark}: allure description html".format(mark=ALLURE_DESCRIPTION_HTML_MARK))
138+
129139

130140
def pytest_collection_modifyitems(items, config):
131141
arg_labels = set().union(config.option.allure_epics,

allure-pytest/src/utils.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
from allure_commons.model2 import StatusDetails
1111
from allure_commons.types import LabelType
1212

13-
ALLURE_TITLE = 'allure_title'
14-
ALLURE_DESCRIPTION = 'allure_description'
15-
ALLURE_DESCRIPTION_HTML = 'allure_description_html'
16-
ALLURE_LABEL_PREFIX = 'allure_label'
17-
ALLURE_LINK_PREFIX = 'allure_link'
13+
ALLURE_DISPLAY_NAME_MARK = 'allure_display_name'
14+
ALLURE_DESCRIPTION_MARK = 'allure_description'
15+
ALLURE_DESCRIPTION_HTML_MARK = 'allure_description_html'
16+
ALLURE_LABEL_MARK = 'allure_label'
17+
ALLURE_LINK_MARK = 'allure_link'
1818
ALLURE_UNIQUE_LABELS = [
1919
LabelType.SEVERITY,
2020
LabelType.FRAMEWORK,
@@ -31,41 +31,41 @@ def get_marker_value(item, keyword):
3131

3232

3333
def allure_title(item):
34-
return get_marker_value(item, ALLURE_TITLE)
34+
return get_marker_value(item, ALLURE_DISPLAY_NAME_MARK)
3535

3636

3737
def allure_description(item):
38-
description = get_marker_value(item, ALLURE_DESCRIPTION)
38+
description = get_marker_value(item, ALLURE_DESCRIPTION_MARK)
3939
if description:
4040
return description
4141
elif hasattr(item, 'function'):
4242
return item.function.__doc__
4343

4444

4545
def allure_description_html(item):
46-
return get_marker_value(item, ALLURE_DESCRIPTION_HTML)
46+
return get_marker_value(item, ALLURE_DESCRIPTION_HTML_MARK)
4747

4848

4949
def allure_labels(item):
50-
for keyword in item.keywords.keys():
51-
if keyword.startswith(ALLURE_LABEL_PREFIX):
52-
marker = item.get_closest_marker(keyword)
53-
label_type = marker.kwargs['label_type']
54-
if label_type in ALLURE_UNIQUE_LABELS:
55-
yield (label_type, marker.args[0])
56-
else:
57-
for value in marker.args:
58-
yield (label_type, value)
50+
unique_labels = dict()
51+
labels = set()
52+
for mark in item.iter_markers(name=ALLURE_LABEL_MARK):
53+
label_type = mark.kwargs["label_type"]
54+
if label_type in ALLURE_UNIQUE_LABELS:
55+
if label_type not in unique_labels.keys():
56+
unique_labels[label_type] = mark.args[0]
57+
else:
58+
for arg in mark.args:
59+
labels.add((label_type, arg))
60+
for k, v in unique_labels.items():
61+
labels.add((k, v))
62+
63+
return labels
5964

6065

6166
def allure_links(item):
62-
for keyword in item.keywords.keys():
63-
if keyword.startswith(ALLURE_LINK_PREFIX):
64-
marker = item.get_closest_marker(keyword)
65-
link_type = marker.kwargs['link_type']
66-
url = marker.args[0]
67-
name = marker.kwargs['name']
68-
yield (link_type, url, name)
67+
for mark in item.iter_markers(name=ALLURE_LINK_MARK):
68+
yield (mark.kwargs["link_type"], mark.args[0], mark.kwargs["name"])
6969

7070

7171
def pytest_markers(item):

0 commit comments

Comments
 (0)