Bajo OS X, puede crear una solución simple usando dos utilidades listas para usar: fswatch
y terminal-notifier
y tres scripts bash simples. Aquí es cómo:
descargar fswatch y terminal-notifier
$ brew install fswatch
$ brew install terminal-notifier
configurar directorios de proyectos
Los directorios de mis proyectos se presentan de la siguiente manera, pero, por supuesto, puede elegir estrategias alternativas:
$PROJECT_ROOT/
logs/
lib/
scripts/
icons/
tests/
crea tres scripts de bash
archivo: scripts / run-tests
Este es un script simple que invoca las pruebas de su marco. En este caso, ejecutamos python unittest
, pero puede personalizarlo para que se adapte a sus necesidades:
#!/bin/bash
# Run unit tests over the test directory
PROJECT_ROOT=$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )
PYTHON=python # customize for your needs
export PYTHONPATH="$PROJECT_ROOT/lib" # customize for your needs
${PYTHON} -m unittest discover --start-directory "$PROJECT_ROOT/tests" # customize for your needs
archivo: scripts / growl-tests
Este script invoca run-tests
y captura stdout y stderr en archivos de registro. Luego muestra un mensaje similar a un gruñido basado en los resultados de run-tests
. Debe personalizar este script para analizar los resultados de run-tests
y decidir si se muestra un icono rojo o verde. El ejemplo que se muestra aquí analiza la salida de unittest
de Python. Si utiliza un sistema diferente, deberá realizar los cambios apropiados en el script.
#!/bin/bash
# Run tests and display results in a "growl"-like window.
PROJECT_ROOT=$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )
TEST_RUNNER="$PROJECT_ROOT/scripts/run-tests"
STDOUT_LOG="$PROJECT_ROOT/logs/unittest_stdout.log"
STDERR_LOG="$PROJECT_ROOT/logs/unittest_stderr.log"
# Run the tests, copy stdout and stderr to STDOUT_LOG and STDERR_LOG
# respectively
$TEST_RUNNER > >(tee "$STDOUT_LOG") 2> >(tee "$STDERR_LOG" >&2)
# Capture the exit status of TEST_RUNNER. We will use this for the
# red / green distinction in our Growl display.
TEST_STATUS=$?
# The following lines are specific to the Python 'unittest' output,
# and aren't required for the red / green display. We extract a few
# extra bits of info so the Growl window can display something like:
# Ran 452 tests in 8.300s
# FAILED (failures=3)
# extract "Ran n tests in n.nnns"
TEST_SUMMARY='tail -3 "$STDERR_LOG" | head -1'
# extract "OK" or "FAILED (failures=n)"
TEST_RESULT='tail -1 "$STDERR_LOG"'
# Compose the two strings to make the entire message
GROWL_MESSAGE="$TEST_SUMMARY
$TEST_RESULT"
# Pick a sound and an icon based on TEST_STATUS
if [ $TEST_STATUS -eq 0 ] ; then
GROWL_SOUND="Submarine"
GROWL_ICON="$PROJECT_ROOT/scripts/icons/GreenBead.png"
else
GROWL_SOUND="Purr"
GROWL_ICON="$PROJECT_ROOT/scripts/icons/RedBead.png"
fi
# Now display the results in a Growl-like window
echo "$GROWL_MESSAGE" | terminal-notifier -sound $GROWL_SOUND -contentImage $GROWL_ICON
archivo: scripts / autorun-tests
Esta secuencia de comandos invoca growl-tests
una vez en el inicio, y luego nuevamente cuando se modifica algún archivo. En la mayoría de los casos, este archivo se puede usar literalmente sin ninguna modificación.
#!/bin/bash
# Run tests automatically whenever files change in the PROJECT_ROOT
PROJECT_ROOT=$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )
TEST_RUNNER="$PROJECT_ROOT/scripts/growl-tests"
# run tests once at startup
"$TEST_RUNNER"
# Run tests whenever anything under PROJECT_ROOT changes
# Note that we explicitly exclude the log files, since they get
# written as a result of running the tests. If we didn't exclude
# them, fswatch would retrigger continuously.
fswatch --one-per-batch "$PROJECT_ROOT" --exclude logs | xargs -n1 -I{} "$TEST_RUNNER"
agrega íconos para hacerlo bonito
Coloque estos iconos en su directorio de scripts / iconos. Se usarán como iconos rojos y verdes en la ventana de crecimiento.
scripts / icons / GreenBead.png:
scripts/icons/RedBead.png:
para ejecutarlo
Simplemente abra una ventana de terminal e inicie las pruebas automáticas:
$ scripts/autorun-tests