在现实世界,“一切不以结婚为目的谈恋爱都是耍流氓”,在编程世界,“一切不以单元测试为收尾的编程都是耍流氓”。

1. 概要

单元测试是一种软件测试方法,通过该方法测试各个单位的源代码,如函数,方法和类,以确定它们是否适合使用。直观地,可以将单元视为应用程序中最小的可测试部分。单元测试是程序员在开发过程中创建的短代码片段,它构成组件测试的基础。学好这部分内容,将为后续的 Python栈 自动化测试打下坚实的基础。

unittest 是 Python 自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。

unittest 中最核心的四个概念是:TestCase, TestSuite, TestLoader, TestResult。

下面我们分别来解释这四个概念的意思,先来看一张unittest的静态类图。

121.png

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