Подтвердить что ты не робот

Есть ли что-то вроде "autotest" для утилит Python?

В основном, озвучивание уведомлений (или других обратных вызовов), когда тесты ломаются или проходят. Есть ли что-нибудь подобное?

Если нет, это должно быть довольно легко написать. Самый простой способ - это сделать.

  • запустить python-autotest myfile1.py myfile2.py etc.py
    • Проверьте, были ли изменены файлы, подлежащие мониторингу (возможно, только если они были сохранены).
    • Запустите любые тесты в этих файлах.
    • Если тест завершился неудачно, но в предыдущем прогоне он прошел, сгенерируйте предупреждение рычания. То же самое происходит с тестами, которые не выполняются.
    • Подождите и повторите шаги 2-5.

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

Лучший способ сделать это - это увидеть, какие биты кода были изменены, если функция abc() изменилась, запустить только те тесты, которые взаимодействуют с этим. Хотя это было бы здорово, я думаю, что это будет чрезвычайно сложно реализовать?

Подводя итог:

  • Есть ли что-то вроде инструмента Ruby autotest (часть пакет ZenTest), но для кода Python?
  • Как вы можете проверить, какие функции изменились между двумя версиями script?
  • Можно ли определить, какие функции вызовет команда? (Несколько напоминает обратную трассировку).
4b9b3361

Ответ 1

Я нашел autonose довольно ненадежным, но sniffer, похоже, работает очень хорошо.

$ pip install sniffer
$ cd myproject

Затем вместо запуска "nosetests" вы запускаете:

$ sniffer

Или вместо nosetests --verbose --with-doctest запускается:

$ sniffer -x--verbose -x--with-doctest

Как описано в readme, рекомендуется установить одну из библиотек для просмотра файловой системы, специфичных для платформы, pyinotify, pywin32 или MacFSEvents (все можно установить через pip и т.д.)

Ответ 2

autonose, созданный gfxmonk:

Autonose - это инструмент, подобный автотесту для python, используя отличную библиотеку nosetest.

autotest отслеживает изменения файловой системы и автоматически перезапускает любые измененные тесты или зависимости, когда файл добавляется, удаляется или обновляется. Файл считается измененным, если он был изменен или был изменен любой файл import.

...

В настоящее время Autonose имеет собственный GUI для OSX и GTK. Если ни один из них не доступен для вас, вы можете вместо этого запустить консольную версию (с опцией --console).

Ответ 3

Я только что нашел это: http://www.metareal.org/p/modipyd/

В настоящее время я использую thumb.py, но по мере того, как мой текущий проект переходит от небольшого проекта к среднему, я искал что-то, что может сделать более тщательный анализ зависимостей и с несколькими настройками, Я быстро и быстро доработал modipyd.

Ответ 5

Для вашего третьего вопроса, возможно, модуль trace - это то, что вам нужно:

>>> def y(a): return a*a
>>> def x(a): return y(a)
>>> import trace
>>> tracer = trace.Trace(countfuncs = 1)
>>> tracer.runfunc(x, 2)
4
>>> res = tracer.results()
>>> res.calledfuncs
{('<stdin>', '<stdin>', 'y'): 1, ('<stdin>', '<stdin>', 'x'): 1}

res.calledfuncs содержит функции, которые были вызваны. Если вы укажете countcallers = 1 при создании трассировщика, вы можете получить отношения вызывающего/вызываемого. Дополнительную информацию см. В docs модуля trace.

Вы также можете попытаться получить вызовы с помощью статического анализа, но это может быть опасно из-за динамического характера Python.

Ответ 6

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

Ответ 8

Guard - отличный инструмент, который автоматически отслеживает изменения файлов и запускает задачи. Он написан на Ruby, но может использоваться как автономный инструмент для любой задачи, подобной этой. Там guard-nosetests плагин для запуска тестов Python через nose.

Guard поддерживает кросс-платформенные уведомления (Linux, OSX, Windows), включая Growl, а также множество других замечательных функций. Один из моих инструментов can't-live-without dev.

Ответ 9

Проверьте pytddmon. Вот видео-демонстрация того, как его использовать: http://pytddmon.org/?page_id=33

Ответ 10

Один очень полезный инструмент, облегчающий вашу жизнь, - entr. Написанный на C и использует kqueue или inotify под капотом.

Следующая команда запускает ваш тестовый пакет, если какой-либо файл *.py в вашем проекте изменен.

ls */**.py | entr python -m unittest discover -s test

Работает для BSD, Mac OS и Linux. Вы можете получить entr из Homebrew.