Как передать аргументы командной строки в тесты pytest, запущенные в vscode - PullRequest
1 голос
/ 21 марта 2020

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

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

0 голосов
/ 22 марта 2020

После долгих экспериментов я наконец нашел, как это сделать. Мне нужно было передать имя пользователя и пароль в мой скрипт, чтобы код мог войти на тестовый сервер. Мой тест выглядел так:
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

...