Python Unittest自动化单元测试框架详解

Dylan
Dylan
发布时间:2026-10-13 | 3人浏览过
原创

本文详细介绍Python内置的Unittest自动化单元测试框架。内容涵盖环境准备、基础用例编写、TestSuite集合管理以及TestRunner执行器使用。通过PyCharm实例展示如何分组运行Case、嵌套Suite及灵活配置测试流程,帮助开发者高效管理自动化测试用例。

本文分享Python Unittest自动化单元测试框架的具体实现代码,供读者参考学习。

1、Python测试框架(本文仅涉及PyUnit)

参考地址

2、环境准备

首先确认已安装Python。随后通过安装PyUnit完成环境配置,较新的Python版本已内置PyUnit(该框架提供图形化测试界面UnittestGUI.py)。参考:查看地址

3、代码实例

本例使用的集成开发环境为PyCharm,DEMO项目结构如图所示。

1. 简单实例

# Test002_Fail.py


# -*- coding:utf-8 -*-

import unittest

class Test002_Fail(unittest.TestCase):

  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass

  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass

  #测试用例1
  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,4,'Result Fail')

  #测试用例2
  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,7,'Result Fail')

if __name__ == '__main__':
  unittest.main()

2. 当测试用例较多时,可使用Suite来管理多个Case。Suite可视为Case的容器,用于容纳多个测试用例。

# SuiteDemo.py
# -*- coding:utf-8 -*-
#一个类,添加测试集
import unittest

class SuiteDemo(unittest.TestCase):


  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass

  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass

  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,5,'Result Fail')
    print 'Case1'

  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,6,'Result Fail')
    print 'Case2'

#定义一个测试集合,方便添加Case

def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(SuiteDemo("test_Case1"))
  suiteTest.addTest(SuiteDemo("test_Case2"))
  return suiteTest


#默认运行时通过 Suite 运行

if __name__ == '__main__':
  unittest.main(defaultTest='suite')

3. Suite与Case可分别编写在不同的Python文件中,以此区分Case模块与Suite管理模块。测试时,只需在Case模块中添加Case,随后将其加入Suite模块即可。

Case模块

# TestCaseDemo

# -*- coding:utf-8 -*-


import unittest


class TestCaseDemo(unittest.TestCase):
  def setUp(self):
    pass

  def tearDown(self):
    pass

  def test_Case1(self):
    print 'test_Case1'

  def test_Case2(self):
    print 'test_Case2'

  def test_Case3(self):
    print 'test_Case3'

  def test_Case4(self):
    print 'test_Case4'

接下来介绍三个Suite模块。它们均先导入Case模块,随后添加Suite,并在Suite内加入Case。执行测试时需使用TestRunner,该组件相当于Suite的执行器。

简单的TestSuite示例:

# TestCase_Demo1.py

# -*- coding:utf-8 -*-

#集合写入一个方法,main调用并启动


import unittest
from TestCase_Demo import TestCaseDemo


#添加一个测试集合,并添加Case

def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  return suiteTest


#指定并启动测试集合,运行集合方法

if __name__ == '__main__':

  runner = unittest.TextTestRunner()
  runner.run(suite())

也可不定义Suite方法,直接在main方法中添加Case并执行。

# TestCase_Demo2.py

# -*- coding:utf-8 -*-

#集合可以写在main


import unittest
from TestCase_Demo import TestCaseDemo


#指定并启动测试集合

if __name__ == '__main__':

  #添加测试集合Case,并启动
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  suiteTest.addTest(TestCaseDemo('test_Case2'))

  #直接启动集合
  runner = unittest.TextTestRunner()
  runner.run(suiteTest)

可将不同Case添加至不同Suite中,同样可对Suite进行分组以区分不同Case。此外,Suite之间还支持嵌套包含。

# TestCase_Demo3.py
# -*- coding:utf-8 -*-

#包含集合,多集合

import unittest
from TestCase_Demo import TestCaseDemo

#添加不同的合集

def Suite1():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case1"))
  suiteTest.addTest(TestCaseDemo("test_Case2"))
  print 'Suite1 运行'
  return suiteTest

def Suite2():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case3"))
  suiteTest.addTest(TestCaseDemo("test_Case4"))
  print 'Suite2 运行'
  return suiteTest

#包含所有的Suite

def AllSuite():
  allTest = unittest.TestSuite((Suite1(),Suite2()))
  return allTest

#运行的时候,可以根据不同的要求,运行不同的Suite,或者全部运行,这样就方便管理每次运行的case

if __name__ == '__main__':
  runner = unittest.TextTestRunner()
  runner.run(AllSuite())

4. 小结

PyUnit是Python的单元测试框架,利用它可以便捷地管理自动化运行的Case。在Python中,凡是以test_开头的方法均被视为用例,即可看作一个Case。本文介绍了使用Suite管理Case及分组运行Case的方法,其他更多功能请参考:unittest — Unit testing framework

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

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表