Как передать параметры в тест Pytest? - PullRequest
0 голосов
/ 26 июня 2019

Скажите, у меня есть этот тест в tests.py

def test_user(username='defaultuser'):

Дело 1

Я хочу передать имя пользователя для тестирования из командной строки, что-то вроде

$ pytest tests.py::test_user user1  # could be --username=user1

Как мне это сделать?

Дело 2

Я хочу передать список имен пользователей для тестирования, например

$ pytest tests.py::test_user "user1, user2, user3"

Я хочу достичь чего-то вроде

@pytest.mark.parametrize("username", tokenize_and_validate(external_param))
def test_user(username):
    pass

def tokenize_and_validate(val):
    if not val:
        return 'defaultuser'
    return val.split(',')

Как я могу это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 июня 2019

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

def pytest_generate_tests(metafunc):
    # This is called for every test. Only get/set command line arguments
    # if the argument is specified in the list of test "fixturenames".
    option_value = metafunc.config.option.name
    if 'name' in metafunc.fixturenames and option_value is not None:
        metafunc.parametrize("name", [option_value])

Затем вы можете запустить изкомандная строка с аргументом командной строки:

pytest -s tests/my_test_module.py --name abc

Для получения более подробной информации перейдите по ссылке

0 голосов
/ 26 июня 2019

Чтобы смоделировать данные, вы можете использовать приборы или использовать встроенные unittest mocks.

from unittest import mock

@mock.patch(func_to_mock, side_effect=func_to_replace)
def test_sth(*args):
    pass

Командная строка также доступны опции .

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