Есть ли что-то вроде «автотеста» для юнит-тестов Python?

В основном, рычание уведомлений (или других обратных вызовов), когда тесты ломаются или проходят.Does anything like this exist?

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

run python-autotest myfile1.py myfile2.py etc.py Check if files-to-be-monitored have been modified (possibly just if they've been saved). Run any tests in those files. If a test fails, but in the previous run it passed, generate a growl alert. Same with tests that fail then pass. Wait, and repeat steps 2-5.

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

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

Чтобы подвести итог:

Is there anything like the Ruby tool autotest (part of the ZenTest package), but for Python code? How do you check which functions have changed between two revisions of a script? Is it possible to determine which functions a command will call? (Somewhat like a reverse traceback)
 dbr21 сент. 2008 г., 08:29
Хм, хорошая мысль ..
 freespace20 сент. 2008 г., 20:33
Я не думаю, что можно правильно проверить, если выonly запустить тесты, которые напрямую ссылаются на измененную функцию. Тогда вы не будете проверять, как функция взаимодействует с остальным кодом. Например, он может пройти тест, но на практике потерпеть неудачу, потому что его поведение изменилось незаметно

Ответы на вопрос(11)

http://www.metareal.org/p/modipyd/

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

 28 мая 2015 г., 13:43
nose-watch отличный плагин Вы можете автоматически запускать свои тесты так:nosetests --with-watch, Работает отлично
 25 сент. 2015 г., 08:41
@ toast38cozanose-watch не работает в Windows (tm)

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 при создании трассировщика вы можете получить отношения вызывающий / вызываемый. Увидетьдокументы изtrace module для дополнительной информации.

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

 dbr21 сент. 2008 г., 08:32
Это именно то, что нужно - спасибо!

autonose созданоgfxmonk:

Autonose is an autotest-like tool for python, using the excellent nosetest library.

autotest tracks filesystem changes and automatically re-run any changed tests or dependencies whenever a file is added, removed or updated. A file counts as changed if it has iself been modified, or if any file it imports has changed.

...

Autonose currently has a native GUI for OSX and GTK. If neither of those are available to you, you can instead run the console version (with the --console option).

 03 сент. 2013 г., 13:44
autonose не похоже на работу сvirtualenv!
 dbr04 сент. 2013 г., 11:36
@exhuma Да, я обнаружил, что автономность немного затруднена, и она больше не активно развивается (последний коммит был 1 год назад, когда я печатал это)
 04 июн. 2012 г., 20:12
Идти сsniffer не автономный, как сказал @jkp.
 03 сент. 2013 г., 14:03
После возни сautonose на некоторое время я тоже отступил кsniffer, Он не такой блестящий, какautonose, но это работает как рекламируется. Даже в виртуальности.

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

Решение Вопроса

я нашелautonose быть довольно ненадежным, ноперехватчик кажется, работает очень хорошо.

$ pip install sniffer
$ cd myproject

Затем вместо запуска «Тесты на нос» вы запускаете:

$ sniffer

Или вместоnosetests --verbose --with-doctest, ты бежишь:

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

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

 04 июн. 2012 г., 20:09
Да,sniffer это путь

nodemon для задачи, наблюдая .py файлы и выполнитьmanage.py test, Команда будет:nodemon --ext py --exec "python manage.py test".

nodemon это пакет npm, однако, я предполагаю, что у вас установлен узел.

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

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

ENTR, Написано на С и используетKqueue или жеInotify под капотом.

После com мандат запускает ваш набор тестов, если таковые имеются*.py Файл в вашем проекте изменен.

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

Работает для BSD, Mac OS и Linux. Ты можешь получитьENTR из доморощенного.

 dbr21 сент. 2008 г., 08:31
Это может сработать, но его чрезвычайно сложно настроить для того, что я хочу. Автотест запускается с помощью «пути к CD / to / my / scripts & amp; & amp; автотест & quot ;, buildbot требует настройки ведомого билда, настройки мастера сборки (довольно сложная конфигурация)

Ваш ответ на вопрос