unittest 单元测试的一个框架
什么框架
一堆工具的集合。
TestCase
TestSuite 测试套件,多个用例在一起
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,
包括运行了多少测试用例,成功了多少,失败了多少等信息
1、用例必须以test开头
2、用例执行的顺序是安装字母排列的顺序来的
import unittest
import HTMLTestRunner
from BeautifulReport import BeautifulReport
def calc(x,y):
return x+y
class TestCalc(unittest.TestCase):
def test_pass_case(self):
'''这个通过的测试用例'''
print('这个通过用例')
res = calc(1,2)
self.assertEqual(3,res)
self.assertNotEqual(2,3)#返回的结果不一样
def setUp(self):
print('我是setUp。。')
#每个用例运行之前都会执行它
def tearDown(self):
#每个用用例运行完之后都会执行它
print('我是tearDown')
@classmethod
def setUpClass(cls):
print('我是setupClass')
#所有的用例执行之前执行一次
@classmethod
def tearDownClass(cls):
print('我是tearDownClass')
#所用的用例都运行完之后执行一次
def test_a(self):
'''这个普通的测试用例'''
print('a')
def test_fail_case(self):
'''这个是失败的测试用例'''
print('这个是失败的测试用例')
res = calc(9,8)
self.assertEqual(98,res)
def test_haha(self):
'''哈哈哈'''
self.assertEqual(1,2)
if __name__ =='__main__':
unittest.main() #他会帮你运行当前这个python里面所有的测试用例。
# suite = unittest.TestSuite()#定义一个测试套件
# # suite.addTest(TestCalc('test_pass_case'))
# # suite.addTest(TestCalc('test_a'))
# # suite.addTest(TestCalc('test_fail_case')) #单个添加用例的
# suite.addTests(unittest.makeSuite(TestCalc)) #这个类里面的所有测试用例
# # f = open('report.html','wb')#打开一个测试报告的文件
# # runner = HTMLTestRunner.HTMLTestRunner(stream=f,title='牛寒阳测试结果',
# # description='描述')
# # runner.run(suite) #运行 难看的报告
# result = BeautifulReport(suite)
# result.report(filename='牛寒阳测试报告', description='描述', log_path='.')
run_all_case.py
import unittest
from BeautifulReport import BeautifulReport
import xmlrunner
suite = unittest.TestSuite()
all_case = unittest.defaultTestLoader.discover('cases','test*.py')
#
# for case in all_case:
# suite.addTests(case)
[ suite.addTests(case) for case in all_case ] #和上面的注释代码是一样的
#result = BeautifulReport(suite)
#result.report(filename='很多测试用例.html',description='这个是描述',log_path='.')
runner = xmlrunner.XMLTestRunner('.') #这个是为了产生报告给Jenkins用
runner.run(suite) #运行用例