Python Unittest自动化单元测试框架详解
本文详细介绍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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













