Open In App
Related Articles

Python | Logging Test Output to a File

Like Article
Save Article
Report issue
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__':

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:

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
Share your thoughts in the comments
Similar Reads