第32讲 Unittest单元测试框架

2020-06-01  本文已影响0人  天涯海角之路

单元测试框架提供功能如下:

  1. 用例组织和执行
  2. 丰富的断言方法。检查点
  3. 丰富的日志

重要概念

  1. TestCase。测试用例是最小的测试单元,用于检查特定输入集合的特定返回值
  2. TestSuite。测试套件是测试用例的集合,用于组装一组要允许的测试
  3. TestRunner。用于协调测试的执行并向用户提供结果
  4. TestFixture。准备执行测试的所需环境,以及关联的清理动作

unittest框架流程

  1. 写好TestCase
  2. 由TestLoader加载TestCase到TsetSuite
  3. 由TextTestRunner运行TestSuite,并把结果保存在报告中

断言方法

断言方法汇总.png

代码示例

calculator.py

class Calculator:
    def __init__(self, a, b):
        self.a = int(a)
        self.b = int(b)

    def add(self):
        return self.a + self.b

    def mul(self):
        return self.a * self.b
test_calculator.py

import unittest
from calculator import Calculator

class MyTest(unittest.TestCase):
    def setUp(self) -> None:
        print("test start")

    def test_add1(self):
        r = Calculator(1, 2)
        self.assertEqual(r.add(), 3)

    def test_add2(self):
        r = Calculator(3, 4)
        self.assertEqual(r.add(), 5)

    def test_mul(self):
        r = Calculator(5.7, 6)
        self.assertEqual(r.mul(), 30)

    def tearDown(self) -> None:
        print("test end")

if __name__ == '__main__':
    ###

1.用addTest方法添加单个测试

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(MyTest("test_add1"))
    suite.addTest(MyTest("test_mul"))

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

2.用addTests方法添加多个测试(以list的形式)

if __name__ == '__main__':
    suit = unittest.TestSuite()
    case_list=[MyTest("test_add1") , MyTest("test_mul")]
    suit.addTests(case_list)

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

3.添加某TestCase下的所有测试

if __name__ == '__main__':
    suit = unittest.TestSuite()
    loader = unittest.TestLoader()
    test_class = loader.loadTestsFromTestCase(MyTest)
    suit.addTest(test_class)

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

总结

  1. 三个类对象:TestCase、TestSuite、TextTestRunner
  2. 两次传参:
    2.1 把TestCase对象传入TestSuite
    2.2 把TestSuite对象传入TextTestRunner以启动runner

用unittest.main()

单个用例管理.png

unittest.main方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们

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

测试模型

1. 线性测试
1.1 概念:通过录制或编写对应应用程序的操作步骤产生的线性脚本
1.2 优点:每个脚本相对独立,且不产生其他依赖和调用,任何一个测试用力脚本拿出来都可以单独执行
1.3 缺点:开发成本高,用例之间存在重复的操作

2. 模块化驱动测试
2.1 概念:将重复的操作独立成共享模块(函数、类),当用例执行过程中需要用到这一模块操作的时候才被调用
2.2 优点:最大限度消除了重复,提高了开发效率和测试用例的可维护性
2.3 缺点:当模块化的步骤相同,仅测试数据不同时,需要重复写测试代码

3. 数据驱动测试
3.1 概念:它将测试中的测试数据和操作分离,数据存放在另外一个文件中单独维护。通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变
3.2 优点:通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试
3.3 缺点:数据的准备工作

上一篇下一篇

猜你喜欢

热点阅读