單元測試框架unittest 複習

測試:在規定的條件下對軟件進行操作,發現軟件存在的邏輯,功能,性能等問題
測試過程:單元測試–集成測試–系統測試–性能測試

單元測試:對軟件設計最小單元進行正確性檢測的測試,發現可能存在的問題。
單元測試的目的:就是發現模塊內部的邏輯,語法,算法等錯誤。
單元測試方式:代碼級別測試模塊功能測試。
代碼級別測試:
接口測試:確保模塊接口實現正確,符合設計文檔規範或者約定。
數據結構測試:確保數據結構可用,數據庫、文件、自定義數據結構;
邊界測試:對於邊界值測試,看模塊會不會出現問題;

模塊功能測試:通過黑盒,對模塊測試。
其他單元測試項:性能,代碼規範

框架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) 

測試用例的判斷:也可以集成這些判斷,進行擴展。
這裏寫圖片描述
這裏寫圖片描述

跳過某些接口,運行測試用例:
跳過測試用例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章