unittest框架(二)单元测试及测试报告

时间:2022-10-02 05:46:31

如果要自测代码,可使用单元测试,需要导入unittest模块,import unittest即可。

例如,自测一个计算连个数相除的函数,代码如下:

import unittest
def calc(a,b):
return round(a/b,) #返回a除以b的结果,保留1位小数
class TestCacl(unittest.TestCase):
def test1(self): #测试用例要以test开头,不然不会被执行
res = calc(,)
self.assertEqual(0.5,res,'计算不正确') #判断实际结果是不是等于预期结果
def test2(self):
res = calc(,)
self.assertIsNone(res,'原因,写不写都可以') #判断返回值是不是None,如果是None就通过了
unittest.main() #会运行当前python文件里面的所有测试用例

在测试完成后,需要获取测试结果,那么此时就需要产生测试报告,下面介绍两种产生测试报告的模块,一个是HTMLTestRunner,另一个是BeautifulReport。

第一种HTMLTestRunner需要打开文件,而且生成的报告相对于BeautifulReport模块产生报告来说,没那么美观,所以,在工作中一般使用好看的报告模块。

import unittest
import HTMLTestRunner
from BeautifulReport import BeautifulReport as bf class TestCalc(unittest.TestCase):
def setUp(self): #每条用例运行之前自动运行
print('我是setUp,是啥时候运行的')
def tearDown(self): #每个用例运行之后自动运行的,不需要去调用
print('tearDown是啥时候运行的')
@classmethod #类方法
def setUpClass(self): #所有用例运行之前运行的
print('setUpClass是啥时候运行的')
@classmethod
def tearDownClass(self): #所有用例运行完成之后运行的
print('tearDownClass是啥时候运行的')
def testh(self):
'''用例注释'''
print('testh')
self.assertEqual(,) def testb(self): #用例的运行顺序是按照测试用例名称的字母顺序来运行的
'''用例注释'''
print('testb')
self.assertEqual(,)
def testa(self):
print('testa')
self.assertEqual(,)
def testc(self):
print('testc')
self.assertEqual(,) #测试套件(用例集),也就是存放测试用例的
#、先把所有的测试用例都放到用例集里面
#、运行这些测试用例
#、产生报告
suite = unittest.TestSuite() #测试集合
suite.addTest( unittest.makeSuite(TestCalc)) #把刚才写的用例加进来
f = open('test.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(f,title = '双鱼座用例标题',description='这是用例描述')
runner.run(suite) #运行用例

下面介绍好看的测试报告怎么产生的吧。。。。

import unittest
import HTMLTestRunner
from BeautifulReport import BeautifulReport as bf class TestCalc(unittest.TestCase):
def testb(self):
'''用例注释'''
print('testb')
self.assertEqual(,)
def testa(self):
print('testa')
self.assertEqual(,)
def testc(self):
print('testc')
self.assertEqual(,)
suite = unittest.TestSuite() #测试集合
suite.addTest( unittest.makeSuite(TestCalc)) #把刚才写的用例加进来
run = bf(suite)
run.report(filename='test',description='这是描述信息,必须写')
#log_path是默认在当前目录下,可以不写,如果要生成在指定目录下就可以写上路径