Как настроить 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.


Хах! Не знаю, как я это пропустил. Это работает только наполовину: если я щелкну правой кнопкой мыши по папке в окне инструмента 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 решить мою проблему


Это будет работать, но тогда вам нужно будет щелкнуть правой кнопкой мыши имя файла тестового скрипта в окне 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.


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


0

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.