Не можете получить аргументы командной строки pytest до выполнения теста? - PullRequest
0 голосов
/ 04 июня 2018

Я могу пропустить определенные тесты, зависящие от значения аргументов командной строки.Я пытаюсь получить значения аргументов с pytest.config.getoption("--some-custom-argument"), как описано в этом предложенном вопросе в тестовых файлах, и проверяю значения аргументов с помощью skipif.Но pyest не имеет config.И получение значений аргумента через request.config.getoption("--some-custom-argument"), похоже, работает только в функциях фикстуры.Могу ли я получить аргументы командной строки перед выполнением теста как-нибудь иначе, чем я могу проверить их в skipif на уровне области файла?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Поскольку тесты собираются после этапа настройки и перед сбором тестов (т. Е. Также перед выполнением теста), pytest.config доступен на уровне модулей в тестовых модулях.Пример:

# conftest.py
def pytest_addoption(parser):
    parser.addoption('--spam', action='store')

# test_spam.py
import pytest


print(pytest.config.getoption('--spam'))


@pytest.mark.skipif(pytest.config.getoption('--spam') == 'eggs', 
                    reason='spam == eggs')
def test_spam():
    assert True

Запуск с --spam=eggs выходами:

$ pytest -vs -rs --spam=eggs
============================== test session starts ================================
platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- /data/gentoo64/usr/bin/python3.6
cachedir: .pytest_cache
rootdir: /data/gentoo64/home/u0_a82/projects/stackoverflow/so-50681407, inifile:
plugins: mock-1.6.3, cov-2.5.1, flaky-3.4.0
collecting 0 items                                                                                                     
eggs
collected 1 item

test_spam.py::test_spam SKIPPED
============================ short test summary info ==============================
SKIP [1] test_spam.py:7: spam == eggs

=========================== 1 skipped in 0.03 seconds =============================
0 голосов
/ 13 мая 2019

Если я правильно понял вопрос, вы можете посмотреть на этот ответ .

. Он предлагает использовать прибор с объектом request и читать значение входного аргумента изтам request.config.getoption("--option_name") или request.config.option.name.

Фрагмент кода (кредит идет на ипетрик):

# test.py
def test_name(name):
    assert name == 'almond'


# conftest.py
def pytest_addoption(parser):
    parser.addoption("--name", action="store")

@pytest.fixture(scope='session')
def name(request):
    name_value = request.config.option.name
    if name_value is None:
        pytest.skip()
    return name_value
0 голосов
/ 04 июня 2018

Вы можете попытаться сделать это

@pytest.mark.skipif(pytest.config.option.some-custom-argument=='foo', 
                    reason='i do not want to run this test')

Но почему бы не использовать выражения отметки?

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