下面例子,是一般測試框架的基本結構
框架知識點包括:實例化被測試模塊類、裝載測試用例、測試套件打包、保存測試輸出結果、生成測試報告等
測試情況包括 :跳過某個case、執行成功、執行失敗
#待測試模塊 -> myclass.py
class myclass:
def __init__(self):
pass
def sum(self, x, y):
return x+y
def sub(self, x, y):
return x-y
def cheng(self, x, y):
return x*y
#單元測試模塊 -> mytest.py
import unittest #導入測試模塊
import myclass #導入待測試模塊
class mytest(unittest.TestCase):
#初始化工作
def setUp(self):
self.tclass = myclass.myclass() #實例化了被測試模塊中的類
#退出清理工作
def tearDown(self):
pass
#具體的測試用例
def test_sum(self):
self.assertEqual(self.tclass.sum(1,2) ,3)
#跳過某個case
@unittest.skip("I don't want to run this case.")
def test_sub(self):
self.assertEqual(self.tclass.sub(4,2) ,2)
def test_cheng(self):
self.assertEqual(self.tclass.cheng(2,3) ,5)
if __name__ == '__main__':
#裝載測試用例(該句話等價於tests = [mytest("test_sum"),mytest("test_sub"),mytest("test_cheng")])
tests = unittest.TestLoader().loadTestsFromTestCase(mytest)
#使用測試套件並打包測試用例(addTests()等價於addTest())
suite = unittest.TestSuite()
suite.addTest(tests)
#保存unittest的測試輸出日志
log_name = "log.txt"
with open(log_name, 'w+')as f:
result = unittest.TextTestRunner(stream = f, verbosity = 2).run(suite)
#若不保存測試輸出結果,執行如下命令
#result = unittest.TextTestRunner(verbosity = 2).run(suite)
#生成測試報告
print("testsRun:%s" %result.testsRun)
print("failures:%s" %len(result.failures))
print("errors:%s" %len(result.errors))
print("skipped:%s" %len(result.skipped))
#以上“if __name__ == '__main__':”下的內容,完全可以使用“unittest。main()”替代(前提是:所有的測試模塊均以test開頭)
交互界面執行結果:
測試輸出結果(log):
測試結果保存地址:C:\Users\xxx\Desktop