Как настроить PyCharm для запуска тестов py.test?

163

Я хочу начать писать модульные тесты для моего кода Python, и среда py.test звучит как лучшая ставка, чем пакетный тестовый пакет Python . Поэтому я добавил каталог «tests» в свой проект и добавил в него test_sample.py . Теперь я хочу настроить PyCharm для запуска всех тестов в моем каталоге «tests».

Якобы PyCharm поддерживает py.test в своем тестовом раннере . Предполагается, что вы сможете создать конфигурацию запуска / отладки для запуска ваших тестов, и PyCharm предположительно имеет диалоговое окно «Создать конфигурацию» специально для py.test . Но это полный объем их документации по этому вопросу, и я нигде не могу найти это предполагаемое диалоговое окно.

Если щелкнуть правой кнопкой мыши каталог в окне инструмента Project, я должен увидеть пункт меню «Создать <имя>», но единственный пункт меню, начинающийся с «Создать» - это «Создать конфигурацию выполнения». Хорошо, может быть, документация просто неверна, и «Создать конфигурацию запуска» звучит многообещающе. К сожалению, в этом подменю есть только два элемента: «Юнит-тесты в C: \ mypath ...» и «Док-тесты в C: \ mypath ...», ни один из которых не применим - я не использую ни unittest, ни doctest. Нет пункта меню для py.test.

Если я открою свой test_sample.py и щелкну правой кнопкой мыши в окне редактора, я получу обещанные пункты меню «Создать <имя>»: есть «Создать» Unittests in test_sa ...'... », а затем« Выполнить 'Юнит-тесты в test_sa ...' 'и' Отладка 'Юнит-тесты в test_sa ...' ". Итак, еще раз, все это специфично для фреймворка unittest; ничего для py.test.

Если я попробую пункты меню с надписью «unittest», я получу диалоговое окно с опциями «Имя», «Тип», групповое поле «Тесты» с «Папка» и «Шаблон», «Сценарий» и «Класс». "и" Функция "и т. д. Это похоже на то, что задокументировано как диалоговое окно для добавления конфигурации для модульного теста Python , а не на параметры" Имя "и" Тест для запуска "и" Ключевые слова ", которые должны отображаться в конфигурации для диалога py.test . Там нет ничего внутри диалога, чтобы переключиться, какой тестовый каркас я добавляю.

Я использую PyCharm 1.5.2 на Windows с Python 3.1.3 и pytest 2.0.3. Я могу успешно запускать py.testсвои тесты из командной строки, так что это не что-то простое, как, например, pytest не устанавливается должным образом.

Как настроить PyCharm для запуска моих тестов py.test?

Джо Уайт
источник

Ответы:

228

Пожалуйста, перейдите в файл | Настройки | Инструменты | Интегрированные инструменты Python и измените запуска теста по умолчанию на py.test. Тогда вы получите опцию py.test для создания тестов, а не unittest.

Yole
источник
Хах! Не знаю, как я это пропустил. Это работает только наполовину: если я щелкну правой кнопкой мыши по папке в окне инструмента Project, это даст мне возможность создавать doctests, а не py.tests. (Я напишу отчет об ошибке.) Но это сработает, если я щелкну правой кнопкой мыши в редакторе, а затем изменим «Script:» на имя каталога.
Джо Уайт
3
Также не забудьте пометить ваш исходный каталог как «корень источника»: jetbrains.com/pycharm/webhelp/content-root.html
Inti
1
Есть ли способ установить это для всего проекта (или всех проектов), а не для каждого модуля?
OrangeDog
1
Похоже, что File | Settings | Tools | Python Integrated Toolsэто доступно только в настройках проекта, а не в настройках по умолчанию в PyCharm 5.
killthrush
2
После настройки, как вы на самом деле запускаете тесты?
Крис Андерсон
51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Выберите py.testкак Default test runner.
  2. Если вы используете Django Preference -> Languages&Frameworks -> Django- поставьте галочкуDo not use Django Test runner
  3. Удалите все ранее существующие тестовые конфигурации Run/Debug configuration, иначе тесты будут выполняться с этими более старыми конфигурациями.
  4. Чтобы установить некоторые дополнительные аргументы по умолчанию, обновите конфигурацию по умолчанию для py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
Сергей Кубрак
источник
2
В PyCharm 2017.3.2 даже после того, как я установил py.test по умолчанию, когда я щелкнул правой кнопкой мыши по проекту на панели «Проекты» и выбрал New => Python File, Kind:выпадающий список предлагает только: файл Python, юнит-тест, заглушку Python, а не Pytest. Я посмотрел во всех местах, упомянутых в темах выше. Чего мне не хватает?
Том Бейкер
Файл Python, модульный тест, заглушка Python - это файлы Python, с некоторыми предопределенными данными, которые вы можете добавить свои, прочитайте эту тему jetbrains.com/help/pycharm/… . Но это не влияет на запуск теста py.test, вы можете создать только файл python, и он будет работать. В этой теме мы обсуждаем, как настроить эту функцию jetbrains.com/help/pycharm/running-tests.html для запуска py.test.
Сергей Кубрак
В последнем PyCharm «По умолчанию» называется «Шаблоны»
AgDude
19

Я думаю, что вам нужно использовать пункт Run / Debug Configuration на панели инструментов. Нажмите на него и «Редактировать конфигурации» (или используйте пункт меню «Пуск» -> «Редактировать конфигурации»). В разделе «По умолчанию» на левой панели есть пункт «py.test», который, я думаю, вам нужен.

Я также обнаружил, что руководство не соответствует интерфейсу пользователя для этого. Надеюсь, я правильно понял проблему, и это помогает.

Скотт Гриффитс
источник
4
Страница "Defaults> py.test" фактически не давала мне никакого способа создать конфигурацию. Но если я зашел в диалоговое окно «Редактировать конфигурации», нажал кнопку «+» на панели инструментов, выбрал «py.test» и установил «Рабочий каталог» в каталог, содержащий мои тесты, что создало конфигурацию, которая будет запускать мои тесты. Так что +1 за указание на полезную часть программы. Я дам принятый ответ на @yole, хотя, поскольку я думаю, что изменение значения по умолчанию на py.test является лучшим решением - оно должно позволить мне запустить только текущий файл и тому подобное.
Джо Уайт
@JoeWhite Пожалуйста, добавьте это как ответ, поскольку это было полезно
Хариом Сингх
В окне «Редактировать конфигурацию», после выбора моей конфигурации pytest, мне также пришлось выбрать Targetее Script athи указать ее в корне моей папки тестов
RAbraham
Это намного лучший способ, так как он открывает другие возможности, такие как передача аргументов командной строки и т. Д.
chirag nayak
13

Вот как я заставил это работать с pytest 3.7.2(установленным через pip) и pycharms 2017.3:

  1. Перейти к edit configurations

  1. Добавьте новую конфигурацию запуска и выберите py.test

  1. В подробностях конфигурации запуска вам нужно установить target= pythonи безымянное поле ниже tests. Похоже, это имя вашей тестовой папки. Не слишком уверенно. Я также рекомендую -sаргумент, чтобы при отладке тестов консоль работала правильно. Без аргумента pytest фиксирует вывод и делает глючную консоль отладки.

  1. Моя папка тестов выглядит так. Это чуть ниже корня моего проекта ( my_project/tests).

  1. Мой foobar_test.pyфайл: (импорт не требуется):
def test_foobar ():
    печатать ("привет pytest")
    утверждать верно
  1. Запустите его с помощью обычной команды запуска

Бенджамин Крузье
источник
Есть ли возможность запустить тест только из текущего файла? Я только узнал, что мне нужно менять имя файла в настройках конфигурации каждый раз, когда я открываю другой файл
algot
@ Я не знаю, что у меня на голове. Взгляните на это: jetbrains.com/help/pycharm/performing-tests.html и это: jetbrains.com/pycharm/guide/tips/run-single-test
Бенджамин Крузье
5

Это плохо документировано, чтобы быть уверенным. Как только вы добавите новую конфигурацию из настроек по умолчанию, вы сможете запустить скрипт "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py". Это не задокументировано и имеет свои идеи аргументов командной строки.

Ты можешь:

  1. Попробуйте поиграться, повернуть сценарий вспять и посмотреть, сможете ли вы как-нибудь заставить py.test принимать аргументы. Это может сработать; это было не в первые полчаса для меня.
  2. Просто запустите «py.test * .py» из консоли.

Как ни странно, вам будет трудно найти какую-либо дискуссию, поскольку JetBrains хорошо справляется с бомбардировкой алгоритмов Google своими собственными страницами.

Чарльз Мерриам
источник
3

найди эту ветку, когда я нажму на тот же вопрос и найду решение pycharm version: 2017.1.2 перейдите в «Настройки» -> «Инструменты» -> «Python Integrated Tools» и установите бегунка теста по умолчанию на правой боковой панели как py.test решить мою проблему

jacobcan118
источник
Это будет работать, но тогда вам нужно будет щелкнуть правой кнопкой мыши имя файла тестового скрипта в окне Project. Если вместо этого щелкнуть правой кнопкой мыши область редактора файлов того же тестового сценария, к сожалению, он по-прежнему показывает старый инструмент по умолчанию (Unittests). Это раздражает, так как я не могу указать отдельную функцию, которую хочу протестировать.
Хоню Чжан
3

В pycharm 2019.2 вы можете просто сделать это для запуска всех тестов:

  1. Выполнить> Редактировать конфигурации> Добавить pytest
  2. Установите параметры, как показано на следующем скриншоте скриншот конфигурации
  3. Нажмите Debug (или запустите pytest, используя, например, горячие клавиши Shift + Alt + F9)

Для более высокой интеграции pytest в pycharm см. Https://www.jetbrains.com/help/pycharm/pytest.html.

gebbissimo
источник
2

Я использую 2018.2

Я делаю Run -> Edit Configurations ... Затем нажимаю + в левом верхнем углу модального диалога. Выберите «python tests» -> py.test. Затем я присваиваю ему имя, например «All test with py.test».

Я выбираю Target: имя модуля и помещаю в модуль, в котором находятся мои тесты (для меня это «тесты»), или модуль, в котором весь мой код находится, если мои тесты смешаны с моим кодом. Это сбило меня с толку.

Я установил интерпретатор Python.

Я установил рабочий каталог в каталог проекта.

Брайан С.
источник
0

Мне пришлось сделать со специальной настройкой Python Conda, которая включала установку pip для py.test и использование надстройки Specs (опция --spec) (для Rspec, как хороший язык итоговых тестов);

1. Измените py.test по умолчанию, чтобы включить параметр = --spec, что означает использование плагина: https://github.com/pchomik/pytest-spec

2. Создайте новую тестовую конфигурацию, используя py.test. Измените его интерпретатор python, чтобы использовать ~ / anaconda / envs / ваш выбор интерпретаторов, например, py27 для моих имен.

3. Удалите тестовую конфигурацию «unittests».

4.Теперь конфигурацией теста по умолчанию является py.test с моими прекрасными выводами в стиле Rspec. Я люблю это! Спасибо всем!

PS Документ Jetbrains по настройкам запуска / отладки находится здесь: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test

AnneTheAgile
источник
0

С 2018.3 он, кажется, автоматически обнаруживает, что я использую pytest, что хорошо, но все равно не позволяет запускаться с верхнего уровня проекта. Я должен был работать pytestдля каждого testsкаталога в отдельности.

Однако я обнаружил, что могу выбрать одну из конфигураций и вручную отредактировать ее для запуска в корне проекта, и это сработало. Я должен вручную выбрать его в раскрывающемся меню «Конфигурации» - не могу щелкнуть правой кнопкой мыши корневую папку на панели «Проект». Но, по крайней мере, это позволяет мне запускать все тесты одновременно.

sfjac
источник
0

Включить Pytest для вашего проекта

  1. Откройте Настройки / Настройки | Инструменты | Интегрированные инструменты PythonДиалоговое окно настроек , как описано в Выбор платформы тестирования.
  2. В поле « Выполнить тест по умолчанию» выберите « pytest». .
  3. Нажмите OK, чтобы сохранить настройки.

введите описание изображения здесь

Мило Чен
источник