Доступ к параметрам pytest, установленным в pytest.ini, в условиях маркировки - PullRequest
1 голос
/ 14 февраля 2020

Я пишу тесты для веб-приложения, и иногда требуется некоторое время, чтобы изменения были видны на рабочем сервере. Я не хотел, чтобы эти тесты провалились, но я также не хотел их игнорировать. Таким образом, я хочу пометить такие тесты как xfail при работе на производственном сервере, но мне не удается получить доступ к объекту параметров в маркировке, к которой можно получить доступ внутри тестового набора. Как только эти тесты пройдут с XPASS, маркировка будет удалена. Также эти тесты не должны быть

Есть ли возможность сделать это?

@pytest.mark.xfail(
    options.getini("base_url") == options.getini("production_server"), 
    reason="Change not yet deployed to the production server")
def test_apidoc(self, request, base_url):

Единственный обходной путь, который я вижу, это:

def test_apidoc(self, request, base_url):
    not_production_ready(request)
    if request.config.getoption("base_url") == request.config.getini("production_server"):
        pytest.xfail("Changes not yet deployed to the production")
    pass

, но это будет проигнорируйте тест немедленно.

1 Ответ

1 голос
/ 14 февраля 2020

Вы можете прикрепить маркеры динамически - я бы представил другой маркер, например provisional_xfail, который служит только одной цели: если настройки соответствуют желаемым, и маркер присутствует, тест добавляет маркер xfail. Пример:

# conftest.py

def pytest_collection_modifyitems(config, items):
    if config.getoption('prod') == True:
        for item in items:
            if item.get_closest_marker('provisional_xfail') is not None:
                item.add_marker(pytest.mark.xfail(reason='Should fail for now with prod settings'))

Тест получает маркер provisional_xfail:

import pytest


@pytest.mark.provisional_xfail
def test_spam():
    assert False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...