Differentiate between a failure and an error
A failure in a check step is not the same thing as an error. A failure simply means that the check/test did not pass. An error should be reserved for unexpected exceptions, the application under test crashing for instance. This should also be configurable on a per step basis. In other words, some failures at check steps can cause the test to stop while others don't. This way we can design tests to continue executing on some failures while stopping on critical "ensure" style checks. Likewise, my test should continue executing on most failures but default to stopping when the AUT crashes.