Pytest параметризация теста для списка, сгенерированного из опций cmdline в conftest.py - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь параметризовать тест, который генерируется из параметров cmdline в conftest.py.

#!/usr/bin/env python

import pytest
import test



def pytest_addoption(parser):
    parser.addoption("--low", action="store", type=int, help="low")
    parser.addoption("--high", action="store",type=int,  help="high")


@pytest.fixture(scope="session", autouse=True)
def user(request):
    return request.config.getoption("low")


@pytest.fixture(scope="session", autouse=True)
def rang(request):
    return request.config.getoption("high")




#test_file.py

def data(low, high):
    return list(range(low, high))

@pytest.mark.parametrize("num", data(10, 20))
def test(num):
    assert num < 1000

Я хотел бы выполнить команду типа "pytest --low"= 10 --high = 100 test_file.py ".Код работает нормально с @ pytest.mark.parametrize ("num", data (x, y)) для диапазона значений между x и y.Я не хочу предоставлять какие-либо значения в параметризации, кроме низкого и высокого.Если я кодирую что-то вроде @ pytest.mark.parametrize («num», data (low, high)), выдается ошибка.Есть ли способ, которым я могу получить эту работу по параметризации?Я знаю, что код работает, когда мы генерируем список вне метода.Но я хочу написать метод для генерации списка и использовать этот список в параметризации.

Есть ли какой-нибудь способ, которым я могу получить доступ к этим параметрам низкого и высокого cmdline где-нибудь в test_file.py?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете параметризовать тест, используя крючок pytest_generate_tests.С помощью хука вы получите доступ к аргументам командной строки.

# conftest.py
def pytest_addoption(parser):
    parser.addoption("--low", action="store", type=int, help="low")
    parser.addoption("--high", action="store",type=int,  help="high")


def pytest_generate_tests(metafunc):
    if 'num' in metafunc.fixturenames:
        lo = metafunc.config.getoption('low')
        hi = metafunc.config.getoption('high')
        metafunc.parametrize('num', range(lo, hi))

# test_file.py

def test_spam(num):
    assert num

Другая возможность - получить доступ к аргументам через pytest.config, хотя обратите внимание, что это устаревшая функция, которая скоро будет удалена:

import pytest


def data():
    lo = pytest.config.getoption('low')
    hi = pytest.config.getoption('high')
    return list(range(lo, hi))


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