You could surround each assertion with a try catch. I would wrap an assertion/try catch in simple function to minimise code duplication and aid clarity. The following example will exercise all the test assertions, report the result, continue through all the verification and still fail the test overall. This is known as a fail-safe test vs your fail-fast test, both have their place, it is a horses for courses thing.
passed = true
verify(1 == 1)
verify(1 != 1)
verify(2 == 2)
verify(2 != 2)
assert passed
def verify(def condition) {
try {
assert condition
} catch (AssertionError assertion) {
log.info assertion
passed = false
}
}