Sotto OS X, puoi creare una soluzione semplice usando due utility disponibili: fswatch
e terminal-notifier
e tre semplici script di bash. Ecco come:
scarica fswatch e terminale-notificatore
$ brew install fswatch
$ brew install terminal-notifier
imposta le directory del progetto
Le mie directory di progetto sono strutturate come segue, ma ovviamente puoi scegliere strategie alternative:
$PROJECT_ROOT/
logs/
lib/
scripts/
icons/
tests/
crea tre script bash
file: script / run-test
Questo è un semplice script che richiama i test del tuo framework. In questo caso stiamo eseguendo python unittest
, ma puoi personalizzarlo in base alle tue esigenze:
#!/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
file: script / growl-test
Questo script richiama run-tests
e cattura stdout e stderr nei file di registro. Quindi visualizza un messaggio simile a un ringhio basato sui risultati di run-tests
. È necessario personalizzare questo script per analizzare i risultati di run-tests
e decidere se visualizzare un'icona rossa o verde. L'esempio mostrato qui analizza l'output di% co_de di Python. Se si utilizza un sistema diverso, è necessario apportare le modifiche appropriate allo 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
file: script / test automatici
Questo script richiama unittest
una volta all'avvio, e poi di nuovo ogni volta che un file viene modificato. Nella maggior parte dei casi, questo file può essere utilizzato letteralmente senza alcuna modifica.
#!/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"
aggiungi icone per renderlo carino
Inserisci queste icone nella directory degli script / icone. Questi saranno usati come icone rosse e verdi nella finestra di Growl.
scripts / icone / GreenBead.png:
scripts/icons/RedBead.png:
per eseguirlo
Apri semplicemente una finestra di terminale e avvia i test di autorun:
$ scripts/autorun-tests