27. Unittest單元測試框架的介紹與使用


unittest單元測試框架

先貼一下unittest官網地址。unittest文檔開頭介紹了四個重要的概念:test fixture,test case, test suite, test runner。

test fixture

test fixture表示執行一個或多個測試所需的准備。怎么去理解這句話呢?比如我們執行一條創建文章的測試用例,但是如果我們調用創建文章的接口,需要我們進行登錄。那么我們可以把登錄作為一個test fixture。

test case

測試用例,這個不必多說,沒有測試用例就不能叫做接口測試了。

test suite

我們在做接口測試的時候,一般都是執行多條測試用例。這就有了test suite概念,簡單來說,就是把想要執行的測試用例進行組裝然后進行測試。

test  runner

執行測試用例。
為了方便大家的理解,會用一個實例對上面四個概念進行解釋。請看如下代碼:

import unittest


class AddTest(unittest.TestCase):
    def setUp(self):
        print("在每個用例執行之前")

    def tearDown(self):
        print("在每個用例執行之后")

    @classmethod
    def setUpClass(cls):
        print("在用例執行之前,只執行一次,優先於setUp")

    @classmethod
    def tearDownClass(cls):
        print("所有用例運行之后只執行一次")

    def add(self, a, b):
        if type(a) == int and type(b) == int:
            return a + b
        else:
            return "請輸入數字"

    def test_add1(self):
        self.assertEqual(self.add(2, 3), 5, "驗證加法")

    def test_add2(self):
        self.assertEqual(self.add(2, 4), 6, "驗證加法")


if __name__ == '__main__':
    # unittest.main()
    # test suite(構造測試集)
    suite = unittest.TestSuite()
    suite.addTest(AddTest("test_add1"))
    suite.addTest(AddTest("test_add2"))
    # test runner (執行測試)
    runner = unittest.TextTestRunner()
    runner.run(suite)

上面代碼輸出如下內容:

在用例執行之前,只執行一次,優先於setUp
在每個用例執行之前
在每個用例執行之后
在每個用例執行之前
在每個用例執行之后
所有用例運行之后只執行一次

我們來根據代碼拆解一下,看哪部分對應test fixture,test case, test suite, test runner。首先,在使用unittest單元測試框架之前,我們需要導包,我們先import unittest,然后創建一個AddTest類,這個類繼承unittest.TestCase。然后我們創建一個add方法(注意:一般類中的函數我們稱作為方法),然后創建了2條測試用例test_add1,test_add2,注意!測試用例必須以test開頭!然后使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。然后使用test suite把2條測試用例加進去,當然需要注意一點,用例執行是有順序的(按照 ASCII 碼的從小到大的順序),比如test_add1和test_add2,前面都是一樣的,但是最后1位1排在2前面,所以先執行1,最后使用test runner執行測試用例。到這里想必大家都已經明白。最后畫一張思維導圖,更方便大家的理解。

細心的人可以看到,測試用例中有一個assertEqual,這就是我們說比assert更好用的斷言,那么這些斷言有哪些呢?請看下面表格:

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

小結:本章內容只是簡單介紹了一下unittest的使用方法以及相關概念,unittest框架使用起來很簡單也很方便,建議大家多去官網學習,當然不管是UI自動化也好,還是接口自動化也好,如果使用Python實現,一般都不會繞過Unittest這個概念,希望大家可以熟練掌握。

歡迎關注微信公眾號:軟件測試汪。軟件測試交流群:809111560


免責聲明!

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



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