Getting Python's unittest results in a tearDown() method

前端 未结 13 1372
野的像风
野的像风 2020-11-28 22:40

Is it possible to get the results of a test (i.e. whether all assertions have passed) in a tearDown() method? I\'m running Selenium scripts, and I\'d like to do some reporti

13条回答
  •  广开言路
    2020-11-28 23:04

    Name of current test can be retrieved with unittest.TestCase.id() method. So in tearDown you can check self.id().

    Example shows how to:

    • find if current test has error or failure in errors or failures list
    • print test id with PASS or FAIL or EXCEPTION

    Tested example here works with @scoffey 's nice example.

    def tearDown(self):
        result = "PASS"
        #### find and show result for current test
        # I did not find any nicer/neater way of comparing self.id() with test id stored in errors or failures lists :-7
        id = str(self.id()).split('.')[-1]
        # id() e.g. tup[0]:<__main__.MyTest testMethod=test_onePlusNoneIsNone>
        #           str(tup[0]):"test_onePlusOneEqualsThree (__main__.MyTest)"
        #           str(self.id()) = __main__.MyTest.test_onePlusNoneIsNone
        for tup in self.currentResult.failures:
            if str(tup[0]).startswith(id):
                print ' test %s failure:%s' % (self.id(), tup[1])
                ## DO TEST FAIL ACTION HERE
                result = "FAIL"
        for tup in self.currentResult.errors:
            if str(tup[0]).startswith(id):
                print ' test %s error:%s' % (self.id(), tup[1])
                ## DO TEST EXCEPTION ACTION HERE
                result = "EXCEPTION"
    
        print "Test:%s Result:%s" % (self.id(), result)
    

    example of result:

    python run_scripts/tut2.py 2>&1 
    E test __main__.MyTest.test_onePlusNoneIsNone error:Traceback (most recent call last):
      File "run_scripts/tut2.py", line 80, in test_onePlusNoneIsNone
        self.assertTrue(1 + None is None) # raises TypeError
    TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
    
    Test:__main__.MyTest.test_onePlusNoneIsNone Result:EXCEPTION
    F test __main__.MyTest.test_onePlusOneEqualsThree failure:Traceback (most recent call last):
      File "run_scripts/tut2.py", line 77, in test_onePlusOneEqualsThree
        self.assertTrue(1 + 1 == 3) # fails
    AssertionError: False is not true
    
    Test:__main__.MyTest.test_onePlusOneEqualsThree Result:FAIL
    Test:__main__.MyTest.test_onePlusOneEqualsTwo Result:PASS
    .
    ======================================================================
    ERROR: test_onePlusNoneIsNone (__main__.MyTest)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "run_scripts/tut2.py", line 80, in test_onePlusNoneIsNone
        self.assertTrue(1 + None is None) # raises TypeError
    TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
    
    ======================================================================
    FAIL: test_onePlusOneEqualsThree (__main__.MyTest)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "run_scripts/tut2.py", line 77, in test_onePlusOneEqualsThree
         self.assertTrue(1 + 1 == 3) # fails
    AssertionError: False is not true
    
    ----------------------------------------------------------------------
    Ran 3 tests in 0.001s
    
    FAILED (failures=1, errors=1)
    

提交回复
热议问题