как передать значение, возвращаемое прибором, в качестве параметра функции - PullRequest
0 голосов
/ 18 ноября 2018

Я запускаю тест так:

pytest -v testing.py --parameters=10,11,12

внутри прибора я получаю аргументы командной строки, делаю list из string, и мне нужно передать это list в тест, как показано на рисунке

код

#  content of conftest.py
import pytest


def pytest_addoption(parser):
    parser.addoption(
        "--parameters", action="store", default='10,11,12', help="help")


@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--parameters")


#  content of testing.py
import pytest


@pytest.fixture(autouse=True)
def get_params(cmdopt):
    data = cmdopt.split(',')  #  default ['10','11','12']
    return data


@pytest.mark.parametrize('parameter', 'the list that returned the fixture get_params')
def test_mytest(parameter):
    print(parameter)  # I first expect 10 then 11 then 12

Как это можно реализовать? Спасибо.

1 Ответ

0 голосов
/ 18 ноября 2018

Как указано здесь :

Иногда вы можете захотеть реализовать свою собственную схему параметризации или реализовать некоторый динамизм для определения параметров или объема крепление. Для этого вы можете использовать хук pytest_generate_tests , который вызывается при сборе тестовой функции. Через пропущенный в metafunc объект, который вы можете проверить запрашивающий тестовый контекст и, большинство важно, что вы можете вызвать metafunc.parametrize (), чтобы вызвать параметризация.

Итак, проверьте это:

#  content of conftest.py
import pytest


def pytest_addoption(parser):
    parser.addoption(
        "--parameters", action="store", default='10,11,12', help="help")


def pytest_generate_tests(metafunc):
if 'parameters' in metafunc.fixturenames:
    if metafunc.config.getoption('parameters'):
        option_value = metafunc.config.getoption('parameters')
        metafunc.parametrize("parameters", option_value.split(','))

#  content of testing.py
import pytest


def test_mytest(parameter):
    print(parameter)
...