单元测试框架(unittest)
单元测试框架(unittest)
接口测试的本质:通过数据驱动测试类里面的函数
单元测试的本质:通过代码级别测试函数
单元测试框架:unittest,pytest
unittest类功能
写用例:TestCase类 这个类的实例们是一个个独立的用例
加载并执行用例:
TestSuite类:存储用例
TestLoader类:找用例,加载用例,存到TestSuite中
TestRunner类:执行用例
断言,对比实际结果和期望结果:
判定用例是否通过 断言 Assert
测试报告:TextTestRunner类
例子:
import unittest class Demo: def add(self,a,b): return a+b def sub(self,a,b): return a-b class TestDemo(unittest.TestCase):# 继承unittest里面的TestCase类 """编写测试用例,一个用例就是一个函数,函数不能传参,只有self关键字 所有的用例/函数,都是test开头,test_""" def test_demo1(self): res = Demo().add(1, 1) print('1+1=', res) def test_demo2(self): res = Demo().add(-1, -1) print('-1+-1=', res) if __name__ == '__main__': unittest.main() #自测,自动收集当前文件中所有的测试用例来执行
执行结果:.代表成功 E代码出错 F用例没过,失败了
执行排序:根据ASCII编码排序 abcd.......xyz
TestSuite类
import unittest from base import basic class Demo: def add(self,a,b): return a+b def sub(self,a,b): return a-b class TestDemo(unittest.TestCase): def test_demo1(self): res = Demo().add(1, 1) print('1+1=', res) def test_demo2(self): res = Demo().add(-1, -1) print('-1+-1=', res) if __name__ == '__main__': suite = unittest.TestSuite() #存储用例 #方法一:一个个用例/函数添加 # suite.addTest(TestDemo('test_demo1')) #创建测试类的实例,参数是test名称 # suite.addTest(TestDemo('test_demo2')) # runner = unittest.TextTestRunner()#执行 # runner.run(suite) #方法二.1:TestLoader类 # loader = unittest.TestLoader() #创建一个加载器实例 # suite.addTest(loader.loadTestsFromTestCase(TestDemo))#具体到类 # runner = unittest.TextTestRunner() # runner.run(suite) #方法二.2:TestLoader类 loader = unittest.TestLoader() suite.addTest(loader.loadTestsFromModule(basic)) #具体到模块 runner = unittest.TextTestRunner() runner.run(suite)
*实例化一个类要不要传参数是根据什么决定的?初始化函数
断言:判断期望值与实际值的比对结果 一致通过 不一致失败
import unittest class Demo: def add(self,a,b): return a+b def sub(self,a,b): return a-b class TestDemo(unittest.TestCase): def test_demo1(self): res = Demo().add(1, 1) print('1+1=', res) # self.assertEqual(2,res,'计算错误') self.assertIsNone(res) def test_demo2(self): res = Demo().add(-1, -1) print('-1+-1=', res) # self.assertTrue(res) self.assertIn(res,[1,2,-2]) if __name__ == '__main__': unittest.main()
self.assertEqual(期望值,结果值,断言失败可以抛出的错)
self.assertTure(x) bool(x) is True
self.assertIsNone(x) x is None
self.assertIn(a,b) a in b
执行 上下文管理器,使用完成后自动关闭文件,避免忘记关闭文件的情况
with open('test.txt','w+',encoding='UTF-8') as file:
runner = unittest.TextTestRunner(stream=file,verbosity=0/1/2) 2是最详细的
runner.run(suite)
HTMLTestRunner类:测试报告
import HTMLTestRunner
with open('test_report.html','wb') as file:
runner = HTMLTestRunner.HTMLTestRunner(stream=file,verbosity=0/1/2
title='xx',description='xx',tester='xx') 2是最详细的
runner.run(suite)
单元测试内断言加异常处理
try:
self.assertEqual(-2,res,'报错')
except AssertionError as e:
print('xxxx{}'.format(e))
raise e 异常处理完成后记得要抛出异常
单元测试框架unittest内setUp和tearDown函数
def setUp(self):
每一条用例执行前执行
def tearDown(self):
每一条用例执行后执行