PytestUnknownMarkWarning: Unknown pytest.mark.xxx - это опечатка? - PullRequest
1 голос
/ 23 марта 2020

У меня есть файл test.py со следующим кодом:

import pytest

@pytest.mark.webtest
def test_http_request():
    pass

class TestClass:
    def test_method(self):
        pass

pytest -s test.py пройден, но выдал следующие предупреждения:

pytest -s test.py
=============================== test session starts ============================
platform linux -- Python 3.7.3, pytest-5.2.4, py-1.8.0, pluggy-0.13.1
rootdir: /home/user
collected 2 items

test.py ..

=============================== warnings summary ===============================
anaconda3/lib/python3.7/site-packages/_pytest/mark/structures.py:325
  ~/anaconda3/lib/python3.7/site-packages/_pytest/mark/structures.py:325:
    PytestUnknownMarkWarning: Unknown pytest.mark.webtest - is this a typo?  You can register
    custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html
    PytestUnknownMarkWarning,

-- Docs: https://docs.pytest.org/en/latest/warnings.html
=============================== 2 passed, 1 warnings in 0.03s ===================

Environment: Python 3.7.3, pytest 5.2.4, anaconda3

Как лучше всего избавиться от предупреждающего сообщения?

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Чтобы правильно справиться с этим вам нужно register the custom marker. Создайте файл pytest.ini и поместите в него следующее.

[pytest]
markers =
    webtest: mark a test as a webtest.

При следующем запуске тестов предупреждения о незарегистрированном маркере не будет.

0 голосов
/ 02 мая 2020

@ gold_cy's ответ работает. Если у вас слишком много пользовательских маркеров, которые необходимо зарегистрировать в pytest.ini, альтернативный способ - использовать следующую конфигурацию в pytest.ini:

[pytest]
filterwarnings =
    ignore::UserWarning

или вообще, используйте следующее:

[pytest]
filterwarnings =
    error
    ignore::UserWarning

Приведенная выше конфигурация игнорирует все предупреждения пользователя, но преобразует все остальные предупреждения в ошибки. См. Больше в Захват предупреждений

test.py (обновлен двумя пользовательскими маркерами)

import pytest

@pytest.mark.webtest
def test_http_request():
    print("webtest::test_http_request() called")
    pass

class TestClass:
    @pytest.mark.test1
    def test_method(self):
        print("test1::test_method() called")
        pass

Используйте следующие команды для запуска желаемых тестов:

pytest -s test.py -m webtest
pytest -s test.py -m test1
...