Python Unittest框架使用指南:从环境配置到报告生成

追风的人
追风的人
发布时间:2026-10-12| 2人浏览过
原创

本文详细介绍Python内置测试框架Unittest的使用流程。涵盖环境配置、测试类与方法的编写规范,解析setUp等生命周期方法的作用,并深入讲解TestCase、TestSuite、TestLoader及TestRunner等核心组件。此外,提供通过TextTestRunner生成TXT报告和使用HTMLTestRunner生成HTML报告的完整示例,帮助开发者快速掌握自动化测试实践。

Unittest

1.环境

Unittest是Python标准库中内置的测试框架,无需额外安装第三方依赖。在配置环境中,只需进入File菜单,依次选择Settings、Tools,找到Python Integrated Tools选项,将测试框架设置为Unittest即可完成基础配置。

2.编写规范

  • 在测试脚本中,必须首先导入unittest模块。
  • 所有的测试类必须继承自unittest.TestCase基类。
  • 具体的测试方法命名必须以test_作为前缀,以便框架自动识别并执行。
  • 对于测试模块文件和测试类的名称,Unittest没有强制性的命名要求,可根据项目习惯自由定义。

3.Unittest介绍

import unittest

def add(x, y):
 return x + y

def sub(x,y):
 return x - y

class UnittestDemo(unittest.TestCase):

 def setUp(self):
  print("I an setup")

 def test_add(self):
  print("my first unit test demo----add")
  self.assertEqual(add(10,1),11,"assert equal")

 def test_sub(self):
  print("my first unit test demo----sub")
  self.assertEqual(sub(10, 1), 9, "assert equal2")

 @unittest.skip("i don't want to run this case.")
 def test_sub1(self):
  print("my first unit test demo----sub1")
  self.assertEqual(sub(10, 1), 9, "assert equal3")

 def tearDown(self):
  print("I an tearDown")

setUp及TearDown

这两个方法属于方法级别的生命周期钩子。在测试类中,每个以test_开头的方法执行前会调用setUp,执行后会调用tearDown,即每个测试方法都会独立触发一次。

 def setUp(self):
  print("I an setup")

setUpClass及tearDownClass

这两个方法属于类级别的生命周期钩子。它们在整个测试类的所有测试方法执行前仅调用一次setUpClass,在所有方法执行完毕后仅调用一次tearDownClass。

  @classmethod
 def setUpClass(cls):
  print("I an setUpClass") 

setUpModule,tearDownModule

这两个方法属于模块级别的生命周期钩子。它们在模块内所有类的测试方法执行前仅调用一次setUpModule,在所有测试完成后仅调用一次tearDownModule。

4.Unittest使用

import unittest

from unittest_task import UnittestDemo
from HTMLTestRunner import HTMLTestRunner


suite=unittest.TestSuite()#创建用例集合
tests = [UnittestDemo("test_add"), UnittestDemo("test_sub"),UnittestDemo("test_sub1")]
suite.addTests(tests)


with open('HTMLReport.html', 'wb') as fi:
 runner = HTMLTestRunner(stream=fi,
       title = 'MathFunc Test Report',
       description='generated by HTMLTestRunner.',
       verbosity=2
       )
 runner.run(suite)

TestCase

将多个测试用例组合在一起,就构成了TestSuite。

TestSuite

TestSuite用于管理多个测试用例,将分散的测试方法集合为一个整体以便统一执行。

TestLoader

TestLoader的主要功能是自动发现并加载TestCase到TestSuite中,简化用例的注册过程。

TestRunner

TestRunner负责执行具体的测试用例。测试执行的结果会保存到TestResult实例中,该实例记录了运行的测试总数、成功数量、失败数量等关键信息。

skip装饰器

使用skip装饰器可以跳过指定的测试用例不执行。

@unittest.skip("i don't want to run this case.")

无条件跳过

 unittest.skip(reason)

当condition参数为True时,跳过该测试用例。

unittest.skipIf(condition, reason)

当condition参数为False时,不跳过该测试用例,正常执行。

unittest.skipUnless(condition, reason)

self.skipTest('do not run this.')

5.Unittest生成报告

5.1 Unittest生成txt格式报告

if __name__ == '__main__':
 suite = unittest.TestSuite()
 
 tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
 suite.addTests(tests)
 
 with open('UnittestTextReport.txt', 'a') as f:
  runner = unittest.TextTestRunner(stream=f, verbosity=2)
  runner.run(suite)
 

运行包含上述代码的脚本文件后,会在当前目录下生成名为'UnittestTextReport.txt'的文件,所有的测试执行报告信息均输出记录在此文件中。

verbosity参数用于控制执行结果的输出详细程度:0代表简单报告,1代表一般报告,2代表详细报告。

5.2 Unittest生成html格式报告

with open('HTMLReport.html', 'wb') as fi:
 runner = HTMLTestRunner(stream=fi,
       title = 'MathFunc Test Report',
       description='generated by HTMLTestRunner.',
       verbosity=2
       )
 runner.run(suite)

若需输出HTML格式的测试报告,可使用HTMLTestRunner模块。该模块允许自定义修改HTMLTestRunner中的测试代码以适配特定需求。

在Python3环境中,若使用HTMLTestRunner.py时遇到ImportError: No module named 'StringIO'错误,请参考相关解决方案:

https://www.jb51.net/article/168573.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。