DRY: I spy, with my little eye, some repeated code.  Package it in a noddy function and call it from all your tests.
In fact, this applies to the whole test block, though I initially noticed it in the failure code.

runatest () {
   TEST_NAME="$1"
   shift
   if TEST_OUTPUT=`"$CF_UPGRADE" "$@"`
   then echo "$TEST_NAME: Success"
   else
        echo "$TEST_NAME: Failure"
        echo "command line: $CF_UPGRADE"  "$@"
        echo "<output>"
        echo "$TEST_OUTPUT"
        echo "</output>"
    fi
}

runatest "Help argument" -h
runatest "Version argument" -v
runatest "Wrong parameter" -q
...

Less repetition => more clarity !