Python Unittest for Beginners: How to use HTMLTestRunner to generate test reports
Tags: python, testing, unittest, tutorial
Published: 2023-02-05 20:58:10

In this article, we will go over the process of generating test reports using the `unittest` framework in Python. We will use the `HTMLTestRunner` library to generate HTML reports for our tests.

## Setup HTMLTestRunner

The `HTMLTestRunner` library is a third-party library that extends the `unittest` framework to generate HTML reports for our tests. It is available on [GitHub-findyou](https://github.com/findyou/HTMLTestRunnerCN/blob/master/python3x/HTMLTestReportEN.py) or [GitHub-Rusydy](https://github.com/Rusydy/selenium-learn/blob/main/HTMLTestRunner/HTMLTestRunner.py). Just download or copy-paste the file and put it in the same directory as your test file.

## Using HTMLTestRunner

To use HTMLTestRunner to create an HTML report for your tests, you need to write your test cases using the unittest library, and then use HTMLTestRunner to run your test cases and generate the HTML report. Here's an example:

- initiate a test case class that inherits from `unittest.TestCase`

```python
class MyTestCase(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testCase1(self):
        self.assertEqual(2,2,"testError")

    # The following test case will fail
    def testCase2(self):
        self.assertEqual(2,3,"testError")

    def testCase3(self):
        self.assertEqual(2,5,"测试错误")  # en: test error

    def testCase4(self):
        self.assertEqual(2,1,"测试错误")
    # The upper test case will fail
    
    def testCase5(self):
        pass
```

- create a test suite and add the test cases to the test suite

```python
# 添加Suite, en: add Suite
def Suite():

    #定义一个单元测试容器, en: define a unit test container
    suiteTest = unittest.TestSuite()

    #将测试用例加入到容器, en: add test cases to the container
    suiteTest.addTest(MyTestCase("testCase1"))
    suiteTest.addTest(MyTestCase("testCase2"))
    suiteTest.addTest(MyTestCase("testCase3"))
    suiteTest.addTest(MyTestCase("testCase4"))
    suiteTest.addTest(MyTestCase("testCase5"))
    return suiteTest
```

- run the test suite using HTMLTestRunner

```python
if __name__ == '__main__':
    with open('test_report.html', 'w') as f: 
        runner = HTMLTestRunner.HTMLTestRunner( # type: ignore
            stream=f, 
            title='测试报告', # en: test report
            description='测试报告') # en: test report
        unittest.main(testRunner=runner)
```

- run the test file and generate the HTML report

```bash
python3 test_file.py
```

Replace "test_file.py" with the actual name of your test file. After running the tests, the HTML report will be generated in the same directory with the file name "test_report.html". You can open the report in any web browser to view the test results.

## Summary

In this article, we showed you how to set up and use HTMLTestRunner to generate HTML reports for your unit tests. HTMLTestRunner is a useful tool that makes it easy to view the results of your tests in a clear and organized way. By using HTMLTestRunner, you can quickly and easily see which tests passed and which failed, and get a more profound understanding of the overall status of your tests. The full code on this page can be found on [GitHub](https://github.com/Rusydy/selenium-learn/tree/main/HTMLTestRunner).


>Q&A

- Q: What is the difference between HTMLTestRunner and unittest?
- A: HTMLTestRunner is a third-party library that extends the unittest framework to generate HTML reports for your tests. It is not part of the standard library.


- Q: What is setUp and tearDown in unittest?
- A: The setUp and tearDown methods are used to set up and tear down the test environment. The setUp method is called before each test case is executed, and the tearDown method is called after each test case is executed. You can use the setUp and tearDown methods to set up and tear down the test environment, such as creating a test database, creating a test user, or creating a test file. More information about setUp and tearDown can be found in the [unittest documentation](https://docs.python.org/3.7/library/unittest.html#setupclass-and-teardownclass).