在现实世界,“一切不以结婚为目的谈恋爱都是耍流氓”,在编程世界,“一切不以单元测试为收尾的编程都是耍流氓”。
1. 概要
单元测试是一种软件测试方法,通过该方法测试各个单位的源代码,如函数,方法和类,以确定它们是否适合使用。直观地,可以将单元视为应用程序中最小的可测试部分。单元测试是程序员在开发过程中创建的短代码片段,它构成组件测试的基础。学好这部分内容,将为后续的 Python栈 自动化测试打下坚实的基础。
unittest 是 Python 自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。
unittest 中最核心的四个概念是:TestCase, TestSuite, TestLoader, TestResult。
下面我们分别来解释这四个概念的意思,先来看一张unittest的静态类图。
unittest.TestCase:测试用例类,所有用户定义的测试类都必须继承自此类才会被识别为测试类,提供的测试脚手架(TestFixture)和断言能力。
TestFixture:测试脚手架,表示执行一个或多个测试以及任何关联清理操作所需的准备工作。这可能涉及例如创建临时或代理数据库,目录或启动服务器进程。
unittest.TestSuite:测试套件类,这是测试用例、测试套件或两者的集合。这用于聚合应该一起执行的测试。测试套件由 TestSuite 类实现。
unittest.TestLoader:测试扫描类,用于自动发现提取测试类,测试用例。
unittest.TestResult:测试结果类,用来处理测试用例或测试集执行过程中的所有信息并最终输出,比如代码错误、异常、断言失败、skip等等。所以如果想要增加一些个性化的输出,可以通过扩展此类,如:HTMLTestRunner、BeautifulReport 就是比较常用的两个第三方扩展。
2. 创建单元测试
步骤1 - 在程序中导入unittest
模块。
步骤2 - 定义要测试的功能。在下面的例子中,add()
函数要进行测试。
步骤3 - 通过对unittest.TestCase
进行子类化创建测试用例。
步骤4 - 将测试定义为类中的方法。方法名称必须以"test"开头。
步骤5 - 每个测试调用TestCase
类的断言功能。有许多类型的断言。以下示例调用assertEquals()
函数。
步骤6 - assertEquals()
函数将add()
函数与arg2
参数的结果进行比较,如果比较失败,则抛出assertionError
。
步骤7 - 最后,从unittest
模块调用main()
方法。
'''
@File : unittest_demo.py
@Time : 2020/09/23
@Author : Mr.潘
@Desc : 单元测试使用
@Desc : 助力软件测试行业,邀请你身边的小伙伴,共同加入软件行业,敬请找我!成为我的口碑学员,终生技术支持!
@Contact : email: pansfy@163.com , QQ: 1246928388
@License : (C)Copyright 2020-2021, http://pansaifei.com
'''
def add(x, y):
return x + y
import unittest
class SimpleTest(unittest.TestCase):
def test_add_01(self):
self.assertEquals(add(4, 5), 9)
def test_add_02(self):
self.assertEquals(add(10, 5), 15)
if __name__ == "__main__":
unittest.main()
步骤8 - 从命令行运行上述脚本。
D:Python37>python SimpleTest.py
.
----------------------------------------------------------------------
Ran 2 test in 0.001s
OK