Skip to content
Related Articles

Related Articles

Python | Logging Test Output to a File

View Discussion
Improve Article
Save Article
Like Article
  • Last Updated : 12 Jun, 2019

Problem – Writing the results of running unit tests to a file instead of printed to standard output.

A very common technique for running unit tests is to include a small code fragment (as shown in the code given below) at the bottom of your testing file.

Code #1 :




import unittest
class MyTest(unittest.TestCase):
    ...
if __name__ == '__main__':
    unittest.main()

This makes the test file executable, and prints the results of running tests to standard output. To redirect this output, unwind the main() call a bit and write own main() function as shown in the code given below :

Code #2 :




import sys
  
def main(out = sys.stderr, verbosity = 2):
    loader = unittest.TestLoader()
  
    suite = loader.loadTestsFromModule(sys.modules[__name__])
    unittest.TextTestRunner(out, verbosity = verbosity).run(suite)
      
if __name__ == '__main__':
    with open('testing.out', 'w') as f:
        main(f)

How it works :

  • The interesting thing about the code is not so much the task of getting test results redirected to a file, but the fact that doing so exposes some notable inner workings of the unittest module.
  • At a basic level, the unittest module works by first assembling a test suite.
  • This test suite consists of the different testing methods you defined. Once the suite has been assembled, the tests it contains are executed.
  • These two parts of unit testing are separate from each other. The unittest.TestLoader instance created in the solution is used to assemble a test suite.
  • The loadTestsFromModule() is one of several methods it defines to gather tests. In this case, it scans a module for TestCase classes and extracts test methods from them.
  • The loadTestsFromTestCase() method (not shown) can be used to pull test methods from an individual class that inherits from TestCase.
  • The TextTestRunner class is an example of a test runner class. The main purpose of this class is to execute the tests contained in a test suite. This class is the same test runner that sits behind the unittest.main() function.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!