本次内容主要介绍单元测试框架unittest。
就是对一些函数或者类进行测试的过程。
测试用例。
测试套件。
测试用例加载器。
运行器、执行器。主要用于初始化运行器
测试夹具,测试固件。定义在测试类的下面,主要用于测试环境的准备和清理工作,包含有setUp(在每个测试用例执行之前会执行的代码),tearDown(在每个测试用例执行之后会执行的代码),setUpClass(在每个测试类之前只执行一次的代码,需要使用@classmethod声明),tearDownClass(在每个测试类之后只执行一次的代码,需要使用@classmethod声明)四个函数。
上图为本次讲解需要用到的相关模块,其中”run_test“是unittest自带的,导入第三方库BeautifulReport生成测试报告。report.html是测试报告文件。
模块1:test_add.py
def add(a, b): return a + b # 1,导入 unittest, 是python内置的 import unittest # 2, 测试类 #TestAdd继承TestCase class TestAdd(unittest.TestCase): def test_add_success(self): a = 3 b = 4 expected = 7 actual = add(a, b) # unittest 已经实现好的断言方式 self.assertEqual(expected, actual)
模块2:test_login.py
import unittest #定义login() def login(username=None, password=None): if username is not 'xiao' or password is not '123456': return {"code": "400", "msg": "用户名或密码错误"} if username == 'xiao' and password == '123456': return {"code": "200", "msg": "登录成功"} return {"code": "300", "msg": "用户名或密码为空"} #定义测试类,包含4条测试用例 class TestLogin(unittest.TestCase): def test_login_success(self): username = 'xiao' password = '123456' expected = {"code": "200", "msg": "登录成功"} actual = login(username, password) self.assertEqual(expected, actual) def test_login_fail1(self): username = '' password = '123456' expected = {"code": "300", "msg": "用户名或密码为空"} actual = login(username, password) self.assertEqual(expected, actual) def test_login_fail2(self): username = 'xiao' password = '' expected = {"code": "300", "msg": "用户名或密码为空"} actual = login(username, password) self.assertEqual(expected, actual) def test_login_fail3(self): username = 'xiao' password = '123' expected = {"code": "400", "msg": "用户名或密码错误"} actual = login(username, password) self.assertEqual(expected, actual)
模块3:run_test.py
#导入unittest模块 import unittest from BeautifulReport import BeautifulReport #TestSuite 测试套件,存储所有的测试用例 #初始化测试套件 suite = unittest.TestSuite() #加载所有的测试用例 loader = unittest.TestLoader() #发现用例 cases = loader.discover(r"./") #将找到的所有测试用例加载到suite suite.addTest(cases) #运行用例 #初始化运行器 # runner = unittest.TextTestRunner() # runner.run(suite) runner = BeautifulReport(suite) runner.report('测试报告')