En OS X, puede crear una solución simple de usar dos off-the-shelf utilidades: fswatch
y terminal-notifier
y tres simples scripts de bash. He aquí cómo:
descargar fswatch y de la terminal de notificador
$ brew install fswatch
$ brew install terminal-notifier
configurar directorios de proyecto
Mi proyecto de directorios están establecidos de la siguiente manera, pero, por supuesto, usted puede elegir estrategias alternativas:
$PROJECT_ROOT/
logs/
lib/
scripts/
icons/
tests/
crear tres scripts de bash
archivo: scripts/ejecución de pruebas
Este es un simple script que invoca el framework de pruebas. En este caso estamos ejecutando python unittest
, pero se puede personalizar para satisfacer 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/gruñido-pruebas
Esta secuencia de comandos invoca run-tests
y la captura de stdout y stderr en los archivos de registro. A continuación, muestra un gruñido-como mensaje basado en los resultados de run-tests
. Se debe personalizar este script para analizar los resultados de run-tests
y decidir si mostrar un rojo o verde icono. El ejemplo que se muestra aquí se analiza la salida de Python unittest
. Si usted utiliza un sistema diferente, tendrás que hacer los cambios apropiados para la secuencia de comandos.
#!/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/la ejecución automática de las pruebas
Esta secuencia de comandos invoca growl-tests
una vez al inicio, y luego otra vez cuando un archivo es modificado. Bajo la mayoría de circunstancias, este archivo puede ser usado verbatim 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"
agregar iconos a hacer bastante
Poner estos iconos en sus scripts/directorio de iconos. Estos serán utilizados como el rojo y el verde de los iconos en el Bramido de la ventana.
scripts/iconos/GreenBead.png:
scripts/iconos/RedBead.png:
para ejecutarlo
Simplemente abra una ventana de terminal y lanzar la ejecución automática de pruebas:
$ scripts/autorun-tests