pytest AttributeError: у объекта 'Function' нет атрибута 'get_marker' - PullRequest
0 голосов
/ 18 января 2019

У меня есть этот код в моем conftest.py:

def pytest_collection_modifyitems(config, items):
    items.sort(key=lambda x: 2 if x.get_marker('slow') else 1)

В последнее время это стало причиной следующих исключений:

$ venv/bin/py.test  -vv --tb=short tests
============================================================================ test session starts ============================================================================
platform darwin -- Python 3.5.6, pytest-4.1.1, py-1.7.0, pluggy-0.8.1 -- /Users/.../venv/bin/python3.5
cachedir: .pytest_cache
rootdir: /Users/..., inifile:
collecting ... INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/Users/.../venv/lib/python3.5/site-packages/_pytest/main.py", line 203, in wrap_session
...
INTERNALERROR>   File "/Users/.../venv/lib/python3.5/site-packages/pluggy/callers.py", line 187, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/Users/.../tests/conftest.py", line 14, in pytest_collection_modifyitems
INTERNALERROR>     items.sort(key=lambda x: 2 if x.get_marker('slow') else 1)
INTERNALERROR>   File "/Users/.../tests/conftest.py", line 14, in <lambda>
INTERNALERROR>     items.sort(key=lambda x: 2 if x.get_marker('slow') else 1)
INTERNALERROR> AttributeError: 'Function' object has no attribute 'get_marker'

======================================================================= no tests ran in 0.30 seconds ================================================

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Получил эту ошибку в очень простом тесте, используя pytest version 4.6.3. При поиске я наткнулся на эту ссылку , где нашел нижеприведенное предложение и реализовал его.

pip install pytest==3.10.1

Это сработало сразу. Я думаю, что это должно быть результатом изменений, упомянутых @Messa в его ответе.

0 голосов
/ 18 января 2019

Pytest изменил свой API в версии 4.

Быстрое решение: используйте get_closest_marker() вместо get_marker():

def pytest_collection_modifyitems(config, items):
    items.sort(key=lambda x: 2 if x.get_closest_marker('slow') else 1)

См. https://github.com/pytest-dev/pytest/pull/4564

Удалить Node.get_marker(name) возвращаемое значение было невозможно использовать более чем для проверки существования.

Используйте Node.get_closest_marker(name) в качестве замены.

Удалить testfunction.markername атрибутов - используйте Node.iter_markers(name=None) для их повторения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...