# unittest概述

# 主要组件

unittest​框架是python内置模块,只要用于组织和运行单元测试,其主要组件如下:

  1. TestCase

    1. 即测试用例,​unittest​中提供了一个基本类​TestCase​,可以用来创建新的测试用例
    2. 提供了一系列的assert​方法用来检查运行结果
  2. TestLoader

    1. 用于从包中提取TestCase​用例加入到TestSuite​中
    2. loadTestsFromModule​和loadTestsFromTestCase​等不同细粒度的收集方法
  3. TestSuite

    1. TestSuite​是TestCase​或TestSuite​的容器
    2. TestSuite​按照加入的顺序执行测试用例
  4. TestRunner

    1. 执行测试套件中的测试用例,并返回测试用例执行结果
  5. TextTestRunner

    1. 执行测试套件中的测试用例,并将测试结果用Text的形式进行展示
  6. TestResult

    1. 储存测试用例执行结果的基类
  7. TestFixture

    1. 测试夹具,用于测试用例环境的搭建和销毁,即用例测试前准备环境的搭建(SetUp前置条件),测试后环境的还原(TearDown后置条件)
    2. 有两种使用方式,一种是以测试方法为维度的setUp()​和tearDown()​,一种是以测试类为维度的setUpClass()​和tearDownClass()

执行流程为:

  1. 写好TestCase

  2. 由TestLoader加载TestCase到TestSuite

  3. 由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

    在Runner执行时,默认将执行结果输出到控制台,我们可以设置其输出到文件,在文件中查看结果。

unittest类图

# 单测编写流程

  1. 编写一个python​类,继承TestCase​类,即一个测试类
  2. 定义setUp​和tearDown​,如果定义了则会在每个测试case执行前先执行setUp​方法,执行完毕后执行tearDown​方法,主要是用作测试环境的船舰和销毁。
  3. 在测试类中编写以test​开头的测试方法(测试用例),unittest会自动将test​开头的方法放入测试用例集中。
  4. 执行unittest.main()​,该函数会负责运行测试,它会实例化所有TestCase​的子类,并运行其中所有以test打头的方法。

# 总结

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

  2. unittest​的流程:写好TestCase​,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

  3. 一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。

  4. verbosity​参数可以控制执行结果的输出,0​ 是简单报告、1​ 是一般报告、2​ 是详细报告。

  5. 可以通过addTest​和addTests​向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。

  6. setUp()tearDown()setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境

  7. 我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。

  8. 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。

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