Python+unittest框架


1.unittest簡介

unittest庫包括:TestCase、TestSuite、TestLoder、TextRunner、TextTestResult、TestFixture

TestCase是測試的最小單元模塊。它檢查對特定輸入集合的特定響應。unittest提供給一個基類Testcase,可以使用這個類創建一個新測試testTestCase 。

TestSuite是測試集,測試集是測試用例、測試集或者二者的一個集合。它被用於把測試整合在一起,批量運行測試。

TestLoder是用來加載 TestCase到TestSuite中,其中有幾個loadTestsFrom_()方法,就是從各個地方尋找TestCase,創建他們的實例,然后add到TestSuite中,再返回一個TestSuite實例

TextRunner是運行測試器, 測試運行器是協調測試執行並向用戶提供結果的組件。運行器可以使用圖形界面、文本界面、或返回特定值來指示執行測試的結果。

TextTestResult測試結果會保存到TextTestResult實例中,包括運行了多少用例,成功與失敗多少等信息

TestFixture表示執行一個或者多個測試前的准備工作,確保每個測試之間的獨立性。這可能涉及到創建臨時或者代理數據庫、目錄、服務器情動進程等相關准備工作

2.unittest的使用

# 步驟1、引入單元測試庫
import unittest

# 步驟2:定義測試類,繼承TestCase類。
class MyTestClass(unittest.TestCase):

    # 在測試類當中,所有用例運行之前,執行的前置工作。不管有幾個用例,且只運行一次。
    # 有3個用例,在第一個用例運行之前,運行一次。
    @classmethod
    def setUpClass(cls):
        print("====我是測試類級別的前置工作===整個測試類,只運行1次!在用例執行之前!====")

    # 在測試類當中,所有用例運行之后,執行的后置工作。不管有幾個用例,且只運行一次。
    @classmethod
    def tearDownClass(cls):
        print("====我是測試類級別的后置工作===整個測試類,只運行1次!在所有用例執行完成之后!====")

    # 每一條用例運行之前,前置工作
    def setUp(self):
        print("=====開始運行  一條用例======")

    # 每一條用例運行之后,后置工作
    def tearDown(self):
        print("=====一條用例  運行結束======")

    # 其中函數名稱以test_開頭的,是一個測試用例。
    def test_upper(self):
        print("***************************")
        # 1、測試數據
        my_str = "iDo"
        # 2、步驟
        res = my_str.upper()
        # 3、斷言 == 期望結果與實際結果比對。
        self.assertEqual(res, "IDO", " 不是大寫")  # 如果期望與實際不符,那么AssertionError

    def test_upper_is_true(self):
        print("***************************")
        # 1、測試數據
        my_str = "iDo"
        # 2、步驟
        res = my_str.isupper()
        # 期望:True  實際的:res
        self.assertTrue(res)

    def test_who_bigger(self):
        print("***************************")
        # 1、測試數據
        a, b = 100, 244
        # 期望:小於
        self.assertLess(a, b)

3.斷言種類

方法 檢查 版本 注釋
assertEqual(a, b) a ==b  

斷言第一個參數和第二個參數是否相等(==相等)、(!=不相等)

assertNotEqual(a, b) a !=b  
assertTrue(x) bool(x) is True   測試表達式是true(或false)

assertFalse(x) Bool(x) is False  
assertIs(a, b) a is b 3.1 斷言第一個參數和第二個參數是否為同一個對象
assertIsNot(a, b) a is not b 3.1
assertIsNone(x) x is None 3.1 斷言表達式是否為None對象
assertIsNotNone(x) x is not None 3.1
assertIn(a, b) a in b 3.1 判斷第一個參數是否在第二個參數中,反過來講,第二個參數是否包含第一個參數
assertNotIn(a, b) a not in b 3.1
assertIsInstance(a, b) isinstance(a,b) 3.1 判斷a與b的數據類型是否相等
assertNotIsInstance(a, b) not isinstance(a,b) 3.1
assertAlmostEqual(a,b, places=None)     判斷a是否約等於b。 palces: 指定精確到小數點后多少位,默認為7
assertNotAlmostEqual(self, first, second, places=None)    
assertDictEqual(a,b)
 dict==dict
  判斷字典a和字典b是否相等
assertCountEqual(a,b)  list==list   判斷a,b兩個列表元素相同
assertMultiLineEqual(a,b)  text==text   判斷a,b的文本一致
assertLess(a,b) a<b   判斷a<b
assertLessEqual(a,b) a<=b   判斷a<=b
assertGreater(a,b) a>b   判斷a>b
assertGreaterEqual(a,b) a>=b   判斷a>=b

4.測試套件的使用

import unittest
from common.HTMLTestRunnerNew import HTMLTestRunner  #生成html測試報告  HtmlTestRunner()
from common import dir_config    # 測試用例集的目錄


# TestSuite實例化
s = unittest.TestSuite()    # 套件實例化
t = unittest.TestLoader()   # 收集器實例化

# 將收集到的用例,放到測試套件當中。
s.addTests(t.discover(dir_config.test_cases_file))

# 打開一個html文件
fs = open(dir_config.html_file, "wb")
# 實例化html結果的用例運行器
runner = HTMLTestRunner(fs,title="前程貸測試報告",description="前程貸接口測試!!",tester="administrator")

# 運行測試套件
runner.run(s)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM