一、概念
""" 1.单元测试,对功能、代码的最小单元进行测试。函数或者类中的方法 2.单元测试框架,提供一个工具的集合,一套解决方案 3.uinttest,python 内置的单元测试框架,pytest,功能更强 在python 进行测试的时候使用assert来断言,而不是if 当使用assert断言测试通过,程序正常执行,如果不通过,则抛出AssertionError assert失败,本质上就是一个异常,异常类型是AssertionError 当没有使用单元测试框架之前,我们确实可以做自动化测试 1.测试用例函数,手工去调用测试函数 2.当用例失败之后,加try...,手工加 3.怎么收集用例,放到一个统一的模块 """ def add(a, b): """被测函数,被测单元,被测功能""" return a + b # a = 1, b = 1, expected = 2 def demo_add(): """测试用例""" actual = add(a=1, b=1) expected = 2 # if actual == expected: # print('通过') # else: # print('失败') assert actual == expected
二、框架
from unittest import TestCase """ unittest 框架 1.便利 2.学习成本,规则,都需要遵守框架的规则。如果你是框架的设计者,你就是规则的制定者 3.unittest 也需要遵守很多规则 test case 测试用例 test suite 测试套件/测试集 test loader 测试加载 test runner 运行器、执行器 fixture 夹具。前置准备和后置清理 unittest用法: 1.继承unittest.TestCase 2.使用unittest,点播放键 3.self.assertEqual(expected, actual) 断言 """ def login(username=None, password=None): if username is None or password is None: return {'为空'} elif username == 'aa' and password == '123': return {'通过'} return {'错误'} # 类遵守规则:必须继承unittest.TestCase class TestLogin(TestCase): def test_login_1(self): """测试用例方法""" username = 'aa' password = '123' ex = {'通过'} ac = login(username, password) # assert ex != ac self.assertEqual(ex, ac) def test_login_2(self): """测试用例方法""" username = 'test' password = '123' ex = {'通过'} ac = login(username, password) assert ex == ac
三、生成报告
import unittest import unittestreport """ 运行所有的用例 """ # 收集用例 suite = unittest.defaultTestLoader.discover('test') # 运行用例 # runner = unittest.TextTestRunner() # runner.run(suite) # 生成报告 runner = unittestreport.TestRunner(suite, title='作业', tester='wyatt', templates=3) runner.run()
效果如下: