Python中有⼀个⾃带的单元测试框架是unittest模块,⽤它来做单元测试,它⾥⾯封装好了⼀些校验返回的结果⽅法和⼀些⽤例执⾏前的初始化操作。 在说unittest之前,先说⼏个概念:
TestCase 也就是测试⽤例
TestSuite 多个测试⽤例集合在⼀起,就是TestSuite指尖文字识别
TestLoader是⽤来加载TestCase到TestSuite中的
TestRunner是来执⾏测试⽤例的,测试的结果会保存到TestResult实例中,包括运⾏了多少测试⽤例,成功了多少,失败了多少等信息1.单元测试:
开发⾃⼰测⾃⼰写的代码;
2.导⼊模块unittest:
KU波可调电衰减器
import unittest #导⼊unittest模块
import HTMLTestRunner #导⼊HTMLTestRunner 报告模板模块
from BeautifulReport import BeautifulReport #导⼊BeautifulReport 报告模板模块
3.运⾏⼀个简单的unittest:
import unittest #单元测试模块
class TestCalc(unittest.TestCase):
def test1(self): #函数名要以test开头,否则不会被执⾏
self.assertEqual(1,1)
def test2(self):
self.assertEqual(1,2)
unittest.main() #会运⾏当前python⽂件⾥⾯的所有测试⽤例
4.unittest单元测试的基本流程:
⽤例集/测试套件:存放测试⽤例的
①.先把所有的测试⽤例都放到⽤例集
②.运⾏这些测试⽤例
③.产⽣报告
代码:
⼀.⽣成报告模板HTMLTestRunner模块(⽐较丑且相对不好⽤)
注:1.安装并导⼊HTMLTestRunner 模块,该模块是可以⽣成报告的模块。
2.运⾏代码时,要以Run xx.py⽅式运⾏,不能以unittest⽅式运⾏,否则不会⽣成报告。
import unittest #单元测试模块
import HTMLTestRunner #⽤来⽣成报告的模块
class TestCalc(unittest.TestCase):
def testcc(self): #函数名要以test开头,否则不会被执⾏
'''这是第⼀个测试⽤例'''#⽤例描述,在函数下,⽤三个单引号⾥⾯写⽤例描述
self.assertEqual(1,1)
print('第⼀个⽤例')
def testaa(self):
'''这个是第⼆个测试⽤例'''
self.assertEqual(1,2)
print('第⼆个⽤例')
def testdd(self):
'''⽤例描述3'''
医用镊子print('第三个⽤例')
def testbb(self):
'''⽤例描述4'''
print('第四个⽤例')
suite = unittest.TestSuite() #定义⼀个测试集合
suite.addTest(unittest.makeSuite(TestCalc)) #把写的⽤例加进来(将TestCalc类)加进来
f = open('test.html','wb') #以⼆进制模式打开⼀个⽂件
runner = HTMLTestRunner.HTMLTestRunner(f,title='unittest⽤例标题',description='这是⽤例描述') runner.run(suite) #运⾏⽤例(⽤例集合)
在浏览器打开⽣成的test.html⽂件,HTMLTestRunner报告如图:
5.setup()/teardown()与setUpClass/tearDownClass。如图:
import unittest #单元测试模块
import HTMLTestRunner #⽤来⽣成报告的模块
class TestCalc(unittest.TestCase):
def setUp(self): #每个⽤例运⾏之前运⾏的
print('setup是啥时候运⾏的')
def tearDown(self): #每个⽤例运⾏之后运⾏的
print('teardown是啥时候运⾏的')
@classmethod
def setUpClass(cls): #在所有⽤例执⾏之前运⾏的
print('我是setUpclass,我位于所有⽤例的开始')
@classmethod
def tearDownClass(cls): #在所有⽤例都执⾏完之后运⾏的
print('我是tearDownClass,我位于多有⽤例运⾏的结束')
def testcc(self): #函数名要以test开头,否则不会被执⾏
'''这是第⼀个测试⽤例'''#⽤例描述,在函数下,⽤三个单引号⾥⾯写⽤例描述
self.assertEqual(1,1)
print('第⼀个⽤例')
def testaa(self):
'''这个是第⼆个测试⽤例'''
self.assertEqual(1,1)
print('第⼆个⽤例')
def testdd(self):
'''⽤例描述3'''mhhpa
print('第三个⽤例')
def testbb(self):
'''⽤例描述4'''
print('第四个⽤例')
unittest.main() #会运⾏当前python⽂件⾥⾯的所有测试⽤例
运⾏结果:
⼆.报告模板BeautifulReport(模板相对好⽤)
代码:
import unittest #单元测试模块
from BeautifulReport import BeautifulReport as bf #导⼊BeautifulReport模块,这个模块也是⽣成报告的模块,但是⽐HTMLTestRunner模板好看class TestCalc(unittest.TestCase):
def setUp(self): #每个⽤例运⾏之前运⾏的
print('setup是啥时候运⾏的')
def tearDown(self): #每个⽤例运⾏之后运⾏的
print('teardown是啥时候运⾏的')
@classmethod
def setUpClass(cls): #在所有⽤例执⾏之前运⾏的
print('我是setUpclass,我位于所有⽤例的开始')
反光道钉@classmethod
def tearDownClass(cls): #在所有⽤例都执⾏完之后运⾏的
print('我是tearDownClass,我位于多有⽤例运⾏的结束')
def testcc(self): #函数名要以test开头,否则不会被执⾏
led像素灯'''这是第⼀个测试⽤例'''#⽤例描述,在函数下,⽤三个单引号⾥⾯写⽤例描述
self.assertEqual(1,1)
print('第⼀个⽤例')
def testaa(self):
'''这个是第⼆个测试⽤例'''
self.assertEqual(1,1)
print('第⼆个⽤例')
def testdd(self):
'''⽤例描述3'''
print('第三个⽤例')
def testbb(self):
'''⽤例描述4'''
print('第四个⽤例')
suite = unittest.TestSuite() #定义⼀个测试集合
suite.addTest(unittest.makeSuite(TestCalc)) #把写的⽤例加进来(将TestCalc类)加进来
run = bf(suite) #实例化BeautifulReport模块
浏览器查看⽣成的报告页⾯: