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

unittest單元測試框架

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

test fixture

test fixture表示執行一個或多個測試所需的準備。怎麼去理解這句話呢?好比咱們執行一條建立文章的測試用例,可是若是咱們調用建立文章的接口,須要咱們進行登陸。那麼咱們能夠把登陸做爲一個test fixture。python

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更好用的斷言,那麼這些斷言有哪些呢?請看下面表格:ui

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這個概念,但願你們能夠熟練掌握。 code

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

相關文章
相關標籤/搜索