Testing Shell Scripts
Table Cases
Count Failures
Table-driven shell tests can store several case outcomes and count the failures in one loop.
Program
Play the script to choose whether one modeled case fails and watch the failure count change.
table_cases.sh
#!/usr/bin/env bash
fail_index=
cases=("login:pass" "search:pass" "deploy:pass")
if [[ "$fail_index" -gt 0 ]]; then
cases[$fail_index]="deploy:fail"
fi
failures=0
for case_result in "${cases[@]}"; do
if [[ "$case_result" == *":fail" ]]; then
failures=$((failures + 1))
fi
done
echo "failures=$failures"
#!/usr/bin/env bash
fail_index=
cases=("login:pass" "search:pass" "deploy:pass")
if [[ "$fail_index" -gt 0 ]]; then
cases[$fail_index]="deploy:fail"
fi
failures=0
for case_result in "${cases[@]}"; do
if [[ "$case_result" == *":fail" ]]; then
failures=$((failures + 1))
fi
done
echo "failures=$failures"
table-driven test
A table keeps case data separate from the loop that evaluates it.
glob pattern
`*":fail"` matches any case result ending in `:fail`.
failure count
Counting failures produces a single value for CI or a summary line.