ภายใต้ OS X คุณสามารถสร้างโซลูชันอย่างง่ายโดยใช้ยูทิลิตีที่ไม่ได้ติดตั้งสองชั้น: fswatch
และterminal-notifier
สคริปต์ทุบตีง่ายๆสามตัว นี่คือวิธี:
ดาวน์โหลด fswatch และเทอร์มินัลแจ้ง
$ brew install fswatch
$ brew install terminal-notifier
ตั้งค่าไดเรกทอรีโครงการ
ไดเรกทอรีโครงการของฉันมีเค้าโครงดังนี้ แต่แน่นอนว่าคุณสามารถเลือกกลยุทธ์ทางเลือกได้:
$PROJECT_ROOT/
logs/
lib/
scripts/
icons/
tests/
สร้างสคริปต์ทุบตีสาม
ไฟล์: สคริปต์ / run-tests
นี่เป็นสคริปต์ง่ายๆที่เรียกใช้การทดสอบเฟรมเวิร์กของคุณ ในกรณีนี้เรากำลังเรียกใช้ python unittest
แต่คุณสามารถปรับแต่งให้เหมาะกับความต้องการของคุณ:
#!/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
ไฟล์: สคริปต์ / คำราม - การทดสอบ
สคริปต์นี้เรียกใช้run-tests
และบันทึก stdout และ stderr ในล็อกไฟล์ run-tests
จากนั้นจะแสดงข้อความคำรามเหมือนขึ้นอยู่กับผลของ คุณต้องปรับแต่งสคริปต์นี้เพื่อแยกผลลัพธ์run-tests
และตัดสินใจว่าจะแสดงไอคอนสีแดงหรือสีเขียว unittest
ตัวอย่างที่แสดงที่นี่จะแยกวิเคราะห์การส่งออกของงูหลามของ หากคุณใช้ระบบอื่นคุณจะต้องทำการเปลี่ยนแปลงที่เหมาะสมกับสคริปต์
#!/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
ไฟล์: สคริปต์ / การทำงานอัตโนมัติทดสอบ
สคริปต์นี้จะเรียกใช้growl-tests
ครั้งเดียวเมื่อเริ่มต้นและอีกครั้งเมื่อใดก็ตามที่มีการแก้ไขไฟล์บางไฟล์ ภายใต้สถานการณ์ส่วนใหญ่ไฟล์นี้อาจใช้คำต่อคำโดยไม่มีการดัดแปลงใด ๆ
#!/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"
เพิ่มไอคอนเพื่อทำให้มันสวย
วางไอคอนเหล่านี้ในไดเรกทอรีสคริปต์ / ไอคอนของคุณ สิ่งเหล่านี้จะถูกใช้เป็นไอคอนสีแดงและสีเขียวในหน้าต่างคำราม
สคริปต์ / ไอคอน / GreenBead.png:
สคริปต์ / ไอคอน / RedBead.png:
เพื่อเรียกใช้
เพียงเปิดหน้าต่างเทอร์มินัลและเปิดใช้การทดสอบการทำงานอัตโนมัติ:
$ scripts/autorun-tests