Як протестувати один файл під pytest


88

Як ви протестуєте один файл у pytest? Я міг знайти лише варіанти ігнорування, а в документах немає опції "протестувати лише цей файл".

Бажано, щоб це працювало в командному рядку, а не setup.cfg, оскільки я хотів би запускати різні тести файлів в ide. Весь номер займає занадто багато часу.

Відповіді:


94

просто запустіть pytestшлях до файлу

щось на зразок

pytest tests/unit/some_test_file.py


3
Гаразд, це, здається, те, що робить pycharm, але він все ще запускає весь пакет. Запуск py.test у командному рядку з якихось причин видає сегментації. Я припускаю, що це виходить за рамки вихідного запитання, тому я прийму вашу відповідь, якщо зможу змусити його працювати.
simonzack

3
Очевидно, addoptsв setup.cfg видає проблеми, якщо шлях туди додано.
simonzack

1
@simonzack Думаю, ви хочете запустити один тестовий приклад із декількох тестових кейсів, що є у файлі. Спробуйте це: py.test test_basic.py -k test_first тут test_first - це тестовий приклад, присутній у моєму файлі test_basic.py.
Анураг Сіньха

73

Це досить просто:

$ pytest -v /path/to/test_file.py

-vПрапор збільшити багатослівність. Якщо ви хочете запустити певний тест у цьому файлі:

$ pytest -v /path/to/test_file.py::test_name

Якщо ви хочете запустити тест, імена яких відповідають шаблону, ви можете використовувати:

$ pytest -v -k "pattern_one or pattern_two" /path/to/test_file.py

У вас також є можливість маркування тестів, тому ви можете використовувати -mпрапор для запуску підмножини маркованих тестів.

test_file.py

def test_number_one():
    """Docstring"""
    assert 1 == 1


@pytest.mark.run_these_please
def test_number_two():
    """Docstring"""
    assert [1] == [1]

Для запуску тесту, позначеного run_these_please:

$ pytest -v -m run_these_please /path/to/test_file.py

2
для path/to/test.py::test_method, я отримав помилку> ПОМИЛКА: не знайдено: /home/namgivu/NN/code/myproject/tests/models/test_bill.py::test_generate_for_today_normal_cycle (без імені '/ home / namgivu / NN / code / myproject / tests / models /test_bill.py::test_generate_for_today_normal_cycle 'у будь-якому з [<Модуль' tests / models / test_bill.py '>])
Nam G VU

1
А як щодо параметризованих тестів з ідентифікаторами? -k my_test[a test id here]не працює, і найкраще, що мені вдалося досі, - -k "my_test and a and test and id and here"це навряд чи дружній формат.
Paul D Smith

1
Приклади, наведені в цьому прикладі (зокрема, один шлях змішування та синтаксис вибору вузла), слід додати до документації pytest, оскільки це насправді не очевидно, як це є IMO.
cjauvin

12

Це спрацювало для мене:

python -m pytest -k some_test_file.py

Це працює і для окремих тестових функцій:

python -m pytest -k test_about_something

це pytest directory_to_tests/some_test_file.pyне працює для мене. Я на Windows python 3.8.2 і pytest 6.0.1
minghua
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.