Open In App

Python | Logging Test Output to a File

Improve
Improve
Like Article
Like
Save
Share
Report

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.


Last Updated : 12 Jun, 2019
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads