1 votos

Configuración automática de rojo / verde notificaciones para pruebas continuas y TDD?

Nota: esto fue publicado originalmente en virtud de stackoverflow, y alguien con sensatez votada abajo él, ya que es realmente OS X específico. Así que me voy a subir por aquí, ya que ha sido generalmente útil.

Me gusta hacer Test Driven Development (TDD), así que me gustaría una manera para mi de la suite de prueba para que se ejecute cada vez que hago un cambio en un archivo de código fuente o archivo de prueba.

Además, me gustaría que los resultados de la prueba para mostrar en un efímero "Growl" estilo ventana en la esquina de mi pantalla, que muestra un icono verde si todas las pruebas pasadas y un icono rojo si una o más pruebas fallan.

Sé que hay un mecanismo para node.js en moca, y para ruby entornos de la guardia-rspec. Pero, ¿cómo puedo crear uno para mi [llene el espacio en blanco] entorno de pruebas en OS X?

1voto

Martin M Puntos 71

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:

GreenBead.png

scripts/iconos/RedBead.png:

RedBead.png

para ejecutarlo

Simplemente abra una ventana de terminal y lanzar la ejecución automática de pruebas:

$ scripts/autorun-tests

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X