測試:在規定的條件下對軟件進行操作,發現軟件存在的邏輯,功能,性能等問題
測試過程:單元測試–集成測試–系統測試–性能測試
單元測試:對軟件設計最小單元進行正確性檢測的測試,發現可能存在的問題。
單元測試的目的:就是發現模塊內部的邏輯,語法,算法等錯誤。
單元測試方式:代碼級別測試和模塊功能測試。
代碼級別測試:
接口測試:確保模塊接口實現正確,符合設計文檔規範或者約定。
數據結構測試:確保數據結構可用,數據庫、文件、自定義數據結構;
邊界測試:對於邊界值測試,看模塊會不會出現問題;
模塊功能測試:通過黑盒,對模塊測試。
其他單元測試項:性能,代碼規範
框架unittest介紹:三個步驟
找到測試類(testcase),加載測試方法(runtest),執行測試方法。
1、*被測模塊*:model.py // 定義一個類,提供接口,實現兩數相加
'''
實現兩個數的加減
'''
class Calculator():
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
'''加法'''
def add(self):
return self.a + self.b
'''減法'''
def sub(self):
return self.a - self.b
'''乘法'''
def mul(self):
return self.a * self.b
'''除法'''
def div(self):
return self.a / self.b
2、準備測試環境,編寫測試用例
import unittest
from module import Calculator
from HTMLTestRunner2 import HTMLTestRunner
"""
1、我們添加了 setUp() 和 tearDown() 兩個方法(其實是重寫了TestCase的這兩個方法),
這兩個方法在每個測試方法執行前以及執行後執行一次,
setUp用來爲測試準備環境,tearDown用來清理環境,已備之後的測試
2、@unittest.skip 跳過某個case不執行
"""
class ModuleTest(unittest.TestCase): //測試用例
def setUp(self): # 初始化,給被測模塊的類傳入參數
self.cal = Calculator(8,4)
def tearDown(self):
pass
// 調用方法,執行斷言判斷
def test_add(self):
result = self.cal.add()
self.assertEqual(result,12)
def test_sub(self):
result = self.cal.sub()
self.assertEqual(result, 4)
def test_mul(self):
result = self.cal.mul()
self.assertEqual(result, 32)
def test_div(self):
result = self.cal.div()
self.assertEqual(result, 2)
#if __name__ == "__main__":
# unittest.main()
if __name__ == "__main__":
#完全可以使用“unittest.main()”替代(前提是:所有的測試模塊均以test開頭)
suite = unittest.TestCase() #第二步,構造測試集,加載需要用到的測試用例
suite.addTest(ModuleTest("test_add"))
suite.addTest(ModuleTest("test_sub"))
suite.addTest(ModuleTest("test_mul"))
suite.addTest(ModuleTest("test_div"))
#執行
#runner = unittest.TextTestRunner()
# runner.run(suite)
with open('HTMLReport.html','w') as f:
runner = HTMLTestRunner(stream=f, title='MathFunc Test Report',
description='generated by HTMLTestRunner.',
verbosity=2)
runner.run(suite) //第三步,調用執行
#若不保存測試輸出結果,執行如下命令
#result = unittest.TextTestRunner(verbosity = 2).run(suite)
3、自動構成測試集
suite = unittest.makeSuite(測試用例名稱,prefix = 'test')
(加載test開頭的文件)
import pytest
import unittest
from module import Calculator
from HTMLTestRunner2 import HTMLTestRunner
class ModuleTest(unittest.TestCase):
def setUp(self):
self.cal = Calculator(8,4)
def tearDown(self):
pass
def test_add(self):
result = self.cal.add()
self.assertEqual(result,12)
def test_sub(self):
result = self.cal.sub()
self.assertEqual(result, 4)
def test_mul(self):
result = self.cal.mul()
self.assertEqual(result, 32)
def test_div(self):
result = self.cal.div()
self.assertEqual(result, 2)
#如果在上面繼續添加測試用例,爲提高效率可以可以自動添加到測試集,如果不想把某些測試用例加載到測試集,**就不要用test開頭**
if __name__ == "__main__":
suite = unittest.makeSuite(ModuleTest,prefix='test')
#suite.addTest(ModuleTest("get_number")) 同樣可以結合這個addtest使用
print(suite.counTestCase()) #打印加載測試用例個數。
runner = unittest.TextTestRunner()
runner.run(suite)
測試用例的判斷:也可以集成這些判斷,進行擴展。
跳過某些接口,運行測試用例:
跳過測試用例