unitarias testrunner test pruebas framework form custom python django unit-testing testing nose

python - testrunner - test form django



¿Cómo ejecutar pruebas automáticamente cuando hay algún cambio en mi proyecto(Django)? (12)

¡Acabo de probar la nose-watch y funcionó fantástico! instala el complemento y ejecuta la prueba con la opción --with-watch .

Actualización : :( no parece funcionar bien cuando se ejecutan pruebas desde el asistente de manage.py de django-nose.

Finalmente, opté por usar tdaemon , que es compatible con django, aunque podría requerir un poco de manipulación también para proyectos de pleno derecho.

Por ejemplo, aquí es cómo lo ejecuté para mi proyecto Django:

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

El --custom-args era enfocar las pruebas a una aplicación específica (igual que lo haría con python manage.py test a_specific_app_to_test

El argumento -d es habilitar el registro de depuración, que imprime qué cambio de archivo provocó la ejecución.

El --ignore-dirs fue necesario porque mis pruebas escribieron en los registros (¡lo que en sí es un problema!) Y tdaemon entró en un bucle infinito.

En este momento estoy ejecutando la python manage.py test vez en cuando después de realizar cambios significativos en mi proyecto de django. ¿Es posible ejecutar esas pruebas automáticamente cada vez que cambio y guardo un archivo en mi proyecto? Será útil detectar errores antes (sé que los rieles tienen algo como esto con rspec). Estoy usando nose y django-nose. Gracias por adelantado.


Escribí una tarea de Gulp para ejecutar automáticamente la ./manage.py test cada vez que se cambian o eliminan los archivos de Python especificados. Necesitarás Node para esto.

Primero, instale Gulp:

yarn add -D gulp@next

Luego use el siguiente gulpfile.js y haga los ajustes necesarios:

const { exec } = require(''child_process''); const gulp = require(''gulp''); const runDjangoTests = (done) => { const task = exec(''./manage.py test --keepdb'', { shell: ''/bin/bash'', // Accept SIGTERM signal. Doesn''t work with /bin/sh }); task.stdout.pipe(process.stdout); task.stderr.pipe(process.stderr); task.on(''exit'', () => { done(); }); return task; }; gulp.task(''test'', runDjangoTests); gulp.task(''watch'', (done) => { let activeTask; const watcher = gulp.watch(''**/*.py'', { // Ignore whatever directories you need to ignored: [''.venv/*'', ''node_modules''], }); const runTask = (message) => { if (activeTask) { activeTask.kill(); console.log(''/n''); } console.log(message); activeTask = runDjangoTests(done); }; watcher.on(''change'', (path) => { runTask(`File ${path} was changed. Running tests:`); }); watcher.on(''unlink'', (path) => { runTask(`File ${path} was removed. Running tests:`); }); });

Luego simplemente ejecute el node node_modules/gulp/bin/gulp.js watch para ejecutar la tarea :)


Estoy acostumbrado a watchr, algo así como Watchr


Hice esto usando un trago. Instalar gulp-shell:

npm install gulp-shell --save-dev

Y en el 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'']);

¡Y ejecuta las pruebas en cualquier momento que haya cambios guardados en cualquier archivo .py o .html!


Necesitarás un servidor de integración continua, algo como Jenkins .


Otro desarrollador de Javascript aquí, he encontrado que nodemon ( https://github.com/remy/nodemon ) funciona bastante bien. Por defecto, mira los archivos *.js , pero eso es configurable con el indicador --ext . Para usarlo, haz:

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

Ahora, cada vez que cambie un archivo *.py , se volverá a ejecutar el comando. Incluso encuentra nuevos archivos.


Puedes usar Django Supervisor sobre Django. Esto evitará el uso de una herramienta de CI (que puede ser útil en cualquier caso, esto no invalida la otra respuesta, tal vez solo complementaria).


Recomendaría configurar django-nose y sniffer . Es bastante fácil de instalar y funciona muy bien. Algo a lo largo de las líneas de este olor.py fue la única personalización que necesitaba. Entonces puedes ejecutar sniffer -x myapp.tests .

Nariz viene con algunas otras cosas que hacen que las pruebas también sean más agradables para trabajar.


Si usa el código de control de git, otra forma de hacerlo es usar el pre-commit git hook.

tal vez error como remote: fatal: Not a git repository: ''.'' , consulte esta publicación https://.com/a/4100577/7007942


Soy un desarrollador de JavaScript, así que utilicé las herramientas que JS developer ha construido con Node.js para lograr el mismo objetivo en mis proyectos. Es muy simple, pero también necesita instalar nodeJS para que funcione.

Creé un archivo llamado gruntfile.js en mi directorio raíz del proyecto:

//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'']); };

Básicamente, lo que está haciendo es ver cualquier archivo en ese directorio que tenga una extensión py y si lo cambiaron ejecutó un comando de shell que en este caso es mi prueba de Python (es posible que desee cambiarlo, mi nombre de prueba es main_test.py). Para ejecutar este script grunt necesitas instalar Node.js y luego tendrás npm en tu ruta global. después de eso, también debe insertar algunos módulos de nodo. Todos estos módulos, excepto grunt-cli, se almacenarán en su carpeta actual, así que asegúrese de estar en la raíz de su proyecto o de la carpeta en la que haya puesto ese gruntfile.js. A continuación, ejecute los siguientes comandos.

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

No te preocupes por el tamaño, estos son módulos muy pequeños. Ahora que tiene todo configurado, simplemente puede ejecutar grunt y comenzará a ver sus archivos py y cuando los guardó ejecutará sus pruebas. Puede que no sea la mejor forma de ejecutar pruebas de Python, pero como dije, soy un desarrollador de JavaScript y creo que Grunt ha proporcionado una forma muy sencilla de ejecutar pruebas incluso para otros idiomas, así que lo uso.


Utilizar entr :

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

O, para obtener crédito adicional, combínelo con un ack :

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

Si quieres que incluso encuentre nuevos archivos a medida que los agregas:

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


Py.test respuesta (que también funciona para la nariz):

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

Como py.test entiende la nariz, esto también funciona para la nariz.