Как настроить PyCharm для запуска тестов py.test? - PullRequest
136 голосов
/ 18 июня 2011

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

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

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

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

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

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

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

Ответы [ 9 ]

208 голосов
/ 18 июня 2011

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

32 голосов
/ 03 января 2018

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
17 голосов
/ 18 июня 2011

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

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

5 голосов
/ 03 сентября 2018

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

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

image

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

image

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

image

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

image

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

image

5 голосов
/ 30 апреля 2016

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

Вы можете:

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

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

3 голосов
/ 15 июня 2017

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

2 голосов
/ 01 августа 2018

Я пользуюсь 2018.2

Я запускаю -> Редактировать конфигурации ... Затем нажмите + в левом верхнем углу модального диалога. Выберите «тесты Python» -> py.test Затем я даю ему имя типа «Все тесты с py.test»

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

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

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

0 голосов
/ 14 марта 2019

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

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

0 голосов
/ 23 августа 2016

Со специальной настройкой 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. Теперь по умолчаниюtest config - это py.test с моими прекрасными выводами в стиле Rspec.Я люблю это!Спасибо всем!

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

...