2013-03-01 1 views
20

На данный момент я бегу python manage.py test каждый раз в то время как после внесения существенных изменений в проект django. Можно ли автоматически запускать эти тесты при каждом изменении и сохранении файла в моем проекте? Будет полезно обнаружить ошибки раньше (я знаю, что у рельсов есть что-то вроде этого с rspec). Я использую нос и джанго-нос. Заранее спасибо.Как автоматически запускать тесты при любых изменениях в моем проекте (Django)?

+1

[Этот проект] (https://pypi.python.org/pypi/nosy) поможет вам, если вы хотите запустить тестовый набор на изменения кода, а не комментировать. – Matt

+0

Спасибо за подсказку, это похоже на то, что мне нужно на данный момент. Не могли бы вы случайно узнать, можно ли добавить носа в django-нос (например, как плагин: [короткое объяснение по поводу джанго-носа] (https://github.com/jbalogh/django-nose#custom-plugins))? – user1011444

+0

Возможный дубликат [Есть ли что-то вроде «autotest» для Python unittests?] (Http://stackoverflow.com/questions/108892/is-there-something-like-autotest-for-python-unittests) – mlt

ответ

-3

Вам понадобится сервер непрерывной интеграции, что-то вроде Jenkins.

+0

Спасибо за ответ. Я обязательно буду проверять это, когда я использую Selenium. Пока что я просто делаю базовые тесты, используя «поддельный» сервер, поставляемый с Django. – user1011444

+0

Дженкинс не имеет ничего общего с Селеном. Вы можете легко использовать его с обычными модульными тестами. –

+1

Стоит упомянуть здесь проект ['django-jenkins'] (https://github.com/kmmbvnr/django-jenkins). –

0

Вы можете использовать Django Supervisor поверх Django. Это позволит избежать использования инструмента CI (который может быть полезен в любом случае, это не делает недействительным другой ответ - возможно, просто дополняет).

7

Я просто попытался nose-watch, и она работала фантастически! установите плагин и запустите тест с помощью опции --with-watch.

Update: :(это не кажется, работает хорошо при выполнении тестов из manage.py помощника Джанго нос в

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

Например вот как я запустил его для моего проекта Джанго:.

tdaemon -t django --custom-args=a_specific_app_to_test -d --ignore-dirs logs 

--custom-args было сосредоточить тесты на с (так же, как вы бы сделали python manage.py test a_specific_app_to_test

Аргумент -d должен включать ведение журнала отладки, в котором печатается, какое изменение файла вызвало запуск.

--ignore-dirs был необходим, потому что мои тесты писали в журналы (что само по себе является проблемой!), А tdaemon перешел в бесконечный цикл.

8

Я разработчик JavaScript, поэтому я использовал инструменты, которые разработчик JS создал с помощью Node.js для достижения той же цели в моих проектах. Это очень просто, но вам также нужно установить nodeJS, чтобы он работал.

Я создал файл с именем gruntfile.js в моем проекте корневой директории:

//gruntfile.js 
module.exports = function(grunt) { 

    grunt.initConfig({ 
    watch: { 
     files: ['*.py'], 
     tasks: ['shell'] 
    }, 
    shell: { 
     test: { 
     command: 'python main_test.py' 
     } 
    } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-shell'); 

    grunt.registerTask('default', ['watch']); 
}; 

Что он делает в основном смотреть любой файл в этом каталоге, который имеет расширение р, и если они изменили его выполнить команду оболочки который в этом случае является моим тестом на python (вы можете изменить его, мое тестовое имя было main_test.py). Чтобы запустить этот скрипт grunt, вам нужно установить Node.js, после чего у вас будет npm в вашем глобальном пути. после этого вам нужно также заблокировать несколько модулей узлов. Все эти модули, кроме grunt-cli, будут сохранены в вашей текущей папке, поэтому убедитесь, что вы находитесь в корне вашего проекта или какой-либо папке, в которую вы помещаете этот файл gruntfile.js. Затем выполните команды.

npm install grunt-cli -g 
npm install grunt 
npm install grunt-contrib-watch 
npm install grunt-shell 

Не беспокойтесь о размере, это очень маленькие модули. Теперь, когда у вас есть все настройки, вы можете просто запустить grunt, и он начнет просмотр ваших файлов py, и когда вы их сохраните, он запустит ваши тесты.Возможно, это не лучший способ запуска тестов на python, но, как я уже сказал, я разработчик JavaScript, и я думаю, что Grunt предоставил очень простой способ выполнения тестов даже для других языков, поэтому я использую его.

1

Я сделал это используя глоток. Установите глоток скорлупу:

npm install gulp-shell --save-dev  

И в gulpfile.js:

var shell = require('gulp-shell') 

gulp.task('run-tests', shell.task([ 
    'python3 manage.py test'])) 

gulp.task('watch', function(){ 
    gulp.watch(['./your-project-name/**/*.html', './your-project-name/**/*.py'], ['run-tests']); 
}); 

gulp.task('default',['run-tests','watch']); 

И прогоняют тесты в любое время есть изменения, сохраненные в любой .py или .html файлов!

16

Использование entr:

$ find . -name '*.py' | entr python ./manage.py test 

Или, для дополнительного кредита, объединить его с ack:

$ ack --python | entr python ./manage.py test 

Если вы хотите, чтобы даже найти новые файлы по мере их добавления:

$ until ack -f --python | entr -d python ./manage.py test; do sleep 1; done 
+4

И если вы используете серебряного искателя, измените «ack -f -python» на «ag -l -python» – c17r

+1

Не слышал о [Серебряный Searcher ] (http://geoff.greer.fm/ag/), спасибо за подсказку! – clacke

+2

никогда не слышал о 'entr'. это даже более полезно, чем то, что я искал. спасибо :) – jorgemdnt

5

py.test answ эр:

pip install pytest-xdist 
py.test -f # will watch all subfolders for changes, and rerun the tests 
+0

Нос больше не поддерживается, а py.test - это просто намного лучше и больше pythonic в любом случае. –

0

Я хотел бы рекомендовать создание django-nose и sniffer. Его очень легко настроить и отлично работает. Что-то вроде линий this scent.py было единственной настройкой, в которой я нуждался. Затем вы можете просто запустить sniffer -x myapp.tests.

Нос поставляется с некоторыми другими лакомствами, которые делают тесты более приятными для работы.

1

Другой Javascript dev здесь, я нашел nodemon (https://github.com/remy/nodemon), чтобы работать очень хорошо. По умолчанию он смотрит файлы *.js, но это настраивается с флагом --ext. Для того, чтобы использовать его, сделайте следующее:

npm install -g nodemon 
cd /your/project/dir/ 
nodemon --ext py --exec "python manage.py test" 

Теперь, всякий раз, когда *.py изменения файла, он будет повторно запустить команду. Он даже находит новые файлы.

+0

Мне это нравится. Очень чистый. – Kazanz

Смежные вопросы