unittest使用

Winter發表於2019-06-11

1.單元測試

  • 單元測試是指對軟體中的最小可測試單元進行檢查和驗證,Python中有一個自帶的單元測試框架unittest模組,不僅可以適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果;

2.unittest庫中的基本元件

  • unittest.TestCase() :是所有測試用例類繼承的基本類,一個類只要繼承了unittest中的TestCase類就是一個測試用例類,就可以在類中寫測試用例;

from unittest import TestCase, main
class MyTest(TestCase):  # 繼承unittest.TestCase
    def setUp(self):
        # 測試用例執行前的初始化工作
        print('開始執行')
    def tearDown(self):
        # 測試用例執行之後的善後工作
        print('執行完畢')
    def testWay(self):
        print('這是測試用例')
if __name__ == '__main__':
    main()  # 執行所有的測試用例

  • unittest.TestSuite() :用來建立測試套件,其中有一個addTest()方法可以將一個或多個測試用例新增到測試套件中,先新增的哪個方法就先執行哪個方法;

  • unittest.TextTextRunner() :通過該類中的run()方法來執行suite所組裝的測試用例;

  • unittest.defaultTestLoader() :通過該類下面的discover()方法可自動根據測試目錄start_dir匹 配查詢測試用例模組(以test開頭,以.py結尾的檔案,例如:test*.py), 並將查詢到的測試用例 組裝到測試套件,因此可以直接通過run()方法執行discover;

  • unittest.skip() :裝飾器,可過濾不需要執行的用例,使這個用例不執行;

  • unittest.main() :可以方便的將一個單元測試模組變為可直接執行的測試指令碼,main()方法使 用TestLoader類來搜尋所有包含在該模組中以“test”命名開頭的測試方法,並自動執行他們 ;

3.TestCase類中的方法

  • setUp() 方法:用於測試用例執行前的初始化。如測試用例中需要訪問資料庫,可以在setUp中建立資料庫連線並進行初始化。如果測試用例需要登入web,可以先獲取cookie,獲取檔案控制程式碼;

  • tearDown() 方法:用於測試用例執行之後的善後工作,如關閉資料庫連線,關閉檔案;

  • assert*() :斷言方法,相當於if-else裡面的條件判斷,在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的;

4.unittest中常用的斷言方法

  • assertEqual(self, first, second, msg=None) :判斷兩個引數是否相等,如果相等則測試用例通過;

  • assertNotEqual(self, first, second, msg=None) :判斷兩個引數是否相等,如果不相等則測試用例通過;

  • assertTrue(self, expr, msg=None) :判斷是否為真,為真則測試用例通過;

  • assertFalse(self, expr, msg=None) :判斷是否為假,為假則測試用例通過;

  • assertIs(a, b, msg=None) :斷言a是否是b,如果是則測試用例通過。

  • 更多的斷言方法可以檢視官網: https://docs.python.org/3/library/unittest.html#assert-methods

5.編寫測試用例

  • 首先從unittest模組中匯入TestCase、main等需要用到的類;

  • 然後自定義一個類繼承TestCase類;

  • 可以重寫TestCase類中的setUp()初始化方法,和tearDown()清理方法,這兩個方法是成對出 現的;

  • 然後編寫以字母開頭的測試用例, 執行順序預設是根據ASCII碼的順序載入測試用例,數字與字母的順序為:0-9,A-Z,a-z

  • 最後呼叫unittest.main()方法將一個單元測試模組變成可以直接執行的測試指令碼,然後自動執行測試用例;


from unittest import TestCase, main
class MyTestCase(TestCase):
    # setUp、tearDown每次執行一個test開頭的方法時,都會呼叫一次
    def setUp(self):
        print('setup')
    def tearDown(self):
        print('tearDown')
    def test_1(self):
        print('第一個測試用例')
    def test_2(self):
        print('第二個測試用例')
if __name__ == '__main__':
    main()

參考: https://www.9xkd.com/user/plan-view.html?id=5676194510

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908432/viewspace-2647254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章