第32讲 Unittest单元测试框架
2020-06-01 本文已影响0人
天涯海角之路
单元测试框架提供功能如下:
- 用例组织和执行
- 丰富的断言方法。检查点
- 丰富的日志
重要概念
- TestCase。测试用例是最小的测试单元,用于检查特定输入集合的特定返回值
- TestSuite。测试套件是测试用例的集合,用于组装一组要允许的测试
- TestRunner。用于协调测试的执行并向用户提供结果
- TestFixture。准备执行测试的所需环境,以及关联的清理动作
unittest框架流程
- 写好TestCase
- 由TestLoader加载TestCase到TsetSuite
- 由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)
总结
- 三个类对象:TestCase、TestSuite、TextTestRunner
- 两次传参:
2.1 把TestCase对象传入TestSuite
2.2 把TestSuite对象传入TextTestRunner以启动runner
用unittest.main()
单个用例管理.pngunittest.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 缺点:数据的准备工作