After many trials and errors, I finally got this working...
Based on scoffey's answer.
Hope it helps.
import unittest
class MyTest(unittest.TestCase):
    currentResult = None # holds last result object passed to run method
    @classmethod
    def setResult(cls, amount, errors, failures, skipped):
        cls.amount, cls.errors, cls.failures, cls.skipped = \
            amount, errors, failures, skipped
    def tearDown(self):
        amount = self.currentResult.testsRun
        errors = self.currentResult.errors
        failures = self.currentResult.failures
        skipped = self.currentResult.skipped
        self.setResult(amount, errors, failures, skipped)
    @classmethod
    def tearDownClass(cls):
        print("\ntests run: " + str(cls.amount))
        print("errors: " + str(len(cls.errors)))
        print("failures: " + str(len(cls.failures)))
        print("success: " + str(cls.amount - len(cls.errors) - len(cls.failures)))
        print("skipped: " + str(len(cls.skipped)))
    def run(self, result=None):
        self.currentResult = result # remember result for use in tearDown
        unittest.TestCase.run(self, result) # call superclass run method
    def testA(self):
        self.assertTrue(True) # succeeds
    def testB(self):
        self.assertTrue(False) # fails
    def testC(self):
        self.assertTrue(1 + None is None) # raises TypeError
    @unittest.skip("skip it") # skipped
    def testD(self):
        self.assertTrue("whatever")
if __name__ == '__main__':
    unittest.main() 
run script with
python test.py > result.txt
result.txt:
tests run: 3
errors: 1
failures: 1
success: 1
skipped: 1
I'm not sure this is the best way, but it's working. Unittest module is easy to use but hard to master, now I feel I know little about it.