Python ErrorList object for use in Webdriver Testing

Here’s a bit of code from a post that was lost when my old site went down, data and all. I don’t recall if the original post was this python version or my original Java version (sorry if that’s what you’re here for, ask in comments and I can find and post that too) It’s an implementation of an ‘assert’ statement that allows for the test to continue on failure, storing the error. At any point I want the test to actually throw an exception, print a report and halt, I just ‘tester.assert_errors()’

# overly simple example.
tester = Tester()
# test something, and store the result to be seen and actually asserted later
tester.assert_true(some_result_boolean, '[FAIL] Aw, shoot. Test failed while checking for some_result')
#
# some more logic here
#
# Now print an error report of what has failed so far, and if there are failures, throw an exception
tester.assert_errors()

Here’s the tester class (with a missing send_email implementation)

from testutils.testutil import send_email

class Tester():
    '''
    A test helper that collects errors, prints reports, etc.
    '''

    def __init__(self):
        '''
        setup some instance vars
        '''
        self.errors = []
        self.is_error_free = True
        self.test_count = 0

    def assert_true(self, test_result, fail_message):
        '''
        Add failures to an error stack
        '''
        self.test_count += 1
        if not test_result:
            self.is_error_free = False
            self.errors.append(fail_message)

            print fail_message

    def print_report(self):
        '''
        Print the status of the error stack
        '''
        if self.is_error_free is True:
            print "[PASS] ** TESTER Test count (" + str(self.test_count) + ") PASS"
        else:
            error_printed_count = 0
            print "[FAIL] ** TESTER Failed Assertions Report - failures/total (" + str(len(self.errors)) + "/" + str(self.test_count) + ")"
            for error in self.errors:
                error_printed_count += 1
                print "\t" + str(error_printed_count) + ") " + str(error)
            print "[FAIL] ** TESTER report end."

    def send_email_on_failure(self, email_address_list):
        '''
        email_address_list: a list of email addresses to be sent a failure report

        '''
        if self.is_error_free:
            return False
        else:
            error_count = 0
            error_report = "[FAIL] ** TESTER Failed Assertions Report - failures/total (" + str(len(self.errors)) + "/" + str(self.test_count) + ")"
            for error in self.errors:
                error_count += 1
                error_report += "\t" + str(error_count) + ") " + str(error)
            error_report += "[FAIL] ** TESTER report end."
            print '[INFO] SENDING FAILURE EMAIL REPORT'
            return send_email(email_address_list, error_report)

    def assert_errors(self):
        '''
        Asserts that the errors stack is empty and prints a report
        '''
        self.print_report()
        assert self.is_error_free

    def cleanup(self):
        '''
        reset the tester object
        '''
        self.errors = []
        self.test_count = 0
        self.is_error_free = True