Как передать аргументы командной строки в тесты pytest, запущенные в vscode

Я написал тесты для запуска pytest в проекте vscode. Файл конфигурации .vscode / settings.json позволяет передавать дополнительные параметры командной строки в pytest, используя:

    "python.testing.pytestArgs": [
        "test/",
        "--exitfirst",
        "--verbose"
    ],

Как я могу передать аргументы настраиваемого сценария самому сценарию тестирования? например, вызвать pytest из командной строки как:

pytest --exitfirst --verbose test/ --test_arg1  --test_arg2

person Uri    schedule 21.03.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как передавать аргументы в pytest с помощью командной строки   -  person quamrana    schedule 21.03.2020
comment
Этот пост отвечает на вопрос, как передавать параметры в тестовые скрипты. Это НЕ тема этого сообщения. Меня интересует, как сделать то же самое в vscode   -  person Uri    schedule 21.03.2020
comment
Извините, я не вижу разницы. Вы цитируете командную строку pytest в своем вопросе, и в ответах по ссылке есть примеры командных строк с параметрами.   -  person quamrana    schedule 21.03.2020
comment
Запуск pytest из командной строки не позволяет отлаживать тест внутри vscode. Вызов из командной строки позволяет перейти в pdb для пошагового выполнения кода. Возможность использования интерактивного отладчика vscode намного лучше.   -  person Uri    schedule 21.03.2020


Ответы (2)


После долгих экспериментов я наконец нашел, как это сделать. Мне нужно было передать имя пользователя и пароль моему сценарию, чтобы код мог войти на тестовый сервер. Мой тест выглядел так:
my_module_test.py

import pytest
import my_module

def login_test(username, password):
    instance = my_module.Login(username, password)
    # ...more...

conftest.py

import pytest

def pytest_addoption(parser):
    parser.addoption('--username', action='store', help='Repository user')
    parser.addoption('--password', action='store', help='Repository password')

def pytest_generate_tests(metafunc):
    username = metafunc.config.option.username
    if 'username' in metafunc.fixturenames and username is not None:
        metafunc.parametrize('username', [username])

    password = metafunc.config.option.password
    if 'password' in metafunc.fixturenames and password is not None:
        metafunc.parametrize('password', [password])

Затем в моем файле настроек я могу использовать:
.vscode / settings.json

{
    // ...more...
    "python.testing.autoTestDiscoverOnSaveEnabled": true,
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": [
        "--exitfirst",
        "--verbose",
        "test/",
        "--username=myname",
        "--password=secret",
    // ...more...
    ],
}

Альтернативный способ - использовать вместо этого файл pytest.ini:
pytest.ini

[pytest]
junit_family=legacy
addopts = --username=myname --password=secret

person Uri    schedule 22.03.2020
comment
Предлагает ли vscode способ легко изменить это в пользовательском интерфейсе? Например, что, если вы хотите передать ему другое имя пользователя и пароль иногда. Это единственный способ изменить settings.json перед запуском тестов или есть ли функция пользовательского интерфейса для настройки тестовых запусков с разными аргументами? - person red888; 17.08.2020
comment
@ red888 Я предполагаю, что вы спрашиваете о запросе имени пользователя и пароля при запуске теста. AFAIK, интерактивного способа сделать это нет. Перед выполнением необходимо изменить файл настроек. - person Uri; 22.08.2020
comment
На самом деле, похоже, что это можно сделать в интерактивном режиме. Я не пробовал, поэтому не уверен, работает ли он для модульных тестов. Дополнительную информацию см. здесь - person Uri; 23.08.2020

Если это только для отладчика, вы можете указать параметры в "args" в вашем launch.json файле. См. https://code.visualstudio.com/docs/python/debugging#_args для более подробной информации.

person Brett Cannon    schedule 24.03.2020
comment
Проблема не в простой отладке. Я пытаюсь использовать расширение модульного теста, которое отображает кнопку на каждом модульном тесте, позволяющую отлаживать один тестовый пример. Единственный известный мне способ вызвать эти тестовые примеры с аргументами - это подать аргументы описанным выше способом. - person Uri; 27.03.2020