По сути, уведомления о рычании (или другие обратные вызовы), когда тесты прерываются или проходят. Есть ли что-нибудь подобное?
В противном случае это должно быть довольно легко написать .. Самый простой способ - ..
python-autotest myfile1.py myfile2.py etc.pyПроблема, которую я вижу, заключается в том, что тесты находятся в другом файле. Простым решением было бы запускать все тесты после каждого сохранения .. но с более медленными тестами это может занять больше времени, чем время между сохранениями, и / или может потребоваться много мощности процессора и т. д.
Лучший способ сделать это - увидеть, какие фрагменты кода изменились, если функция abc () изменилась, запускать только тесты, которые взаимодействуют с этим. Хотя это было бы здорово, я думаю, что это было бы чрезвычайно сложно воплощать в жизнь?
Чтобы обобщить:
autotest (часть Пакет ZenTest), но для кода Python?





Может быть, buildbot пригодится http://buildbot.net/trac
Это могло бы сработать, но очень сложно настроить то, что я хочу. Автотест запускается командой «cd path / to / my / scripts && autotest», buildbot требует настройки ведомого устройства сборки, настройки мастера сборки (довольно сложная конфигурация)
Что касается вашего третьего вопроса, возможно, вам нужен модуль 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 для получения дополнительной информации.
Вы также можете попытаться получить вызовы с помощью статического анализа, но это может быть опасно из-за динамической природы Python.
На сервере разработки Django есть монитор изменений файлов, который отслеживает изменения и автоматически перезагружается. Вы можете повторно использовать этот код для запуска модульных тестов при изменении файла.
Может в Nose http://somethingaboutorange.com/mrl/projects/nose/ есть плагин http://somethingaboutorange.com/mrl/projects/nose/doc/writing_plugins.html
Нашел это: http://jeffwinkler.net/2006/04/27/keeping-your-nose-green/
nosetests --with-watch. Works great
@ toast38coza nose-watch не работает в Windows (tm)
автономный, созданный 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).
После того, как я некоторое время возился с autonose, я тоже вернулся к sniffer. Он не такой блестящий, как autonose, но работает так, как рекламируется. Даже в virtualenv.
@exhuma Ага, я обнаружил, что autonose немного глючит, и он больше не активно разрабатывается (последняя фиксация была 1 год назад, когда я это набираю)
Я только что нашел это: http://www.metareal.org/p/modipyd/
В настоящее время я использую thumb.py, но по мере того, как мой текущий проект переходит от небольшого проекта к среднему, я искал что-то, что могло бы выполнять более тщательный анализ зависимостей, и с несколькими настройками я получил modipyd запускается довольно быстро.
Я обнаружил, что автономный довольно ненадежен, но сниффер, похоже, работает очень хорошо.
$ pip install sniffer
$ cd myproject
Затем вместо проведения «тестов на нос» вы запускаете:
$ sniffer
Или вместо nosetests --verbose --with-doctest вы запускаете:
$ sniffer -x--verbose -x--with-doctest
Как описано в Прочти меня, рекомендуется установить одну из библиотек для отслеживания файловой системы, зависящей от платформы, pyinotify, pywin32 или MacFSEvents (все можно установить через pip и т. д.)
Да, sniffer - это то, что вам нужно.
Сторожить - отличный инструмент, который отслеживает изменения файлов и автоматически запускает задачи. Он написан на Ruby, но его можно использовать как автономный инструмент для любой подобной задачи. Есть плагин сторожевой нос для запуска тестов Python через нос.
Guard поддерживает кроссплатформенные уведомления (Linux, OSX, Windows), включая Growl, а также многие другие замечательные функции. Один из моих инструментов разработки, без которого невозможно жить.
Проверьте pytddmon. Вот видео, демонстрирующее, как его использовать: http://pytddmon.org/?page_id=33
Один очень полезный инструмент, который может облегчить вашу жизнь, - это вход. Написано на C и использует kqueue или inotify под капотом.
Следующая команда запускает ваш набор тестов, если какой-либо файл *.py в вашем проекте был изменен.
ls */**.py | entr python -m unittest discover -s test
Работает для BSD, Mac OS и Linux. Вы можете получить вход от Homebrew.
Вы можете использовать nodemon для этой задачи, просматривая файлы .py и выполняя manage.py test. Команда будет: nodemon --ext py --exec "python manage.py test".
nodemon - это пакет npm, но я предполагаю, что у вас установлен узел.
Я не думаю, что возможно правильно проверить, запускаете ли вы Только тесты, которые напрямую ссылаются на измененную функцию. Тогда вы не будете проверять, как функция взаимодействует с остальной частью кода. Например, он может пройти тест, но потерпеть неудачу на практике, потому что его поведение изменилось незначительно.