python unittest框架理解與總結(二)


unittest基本原理:

  ♦整個平台的搭建使用的是python的unittest測試框架,這里簡單介紹下unittest模塊的簡單應用。

  ♦unittest是python的標准測試庫,相比於其他測試框架是python目前使用最廣的測試框架。

  ♦unittest有四個比較重要的概念是test fixture, test case, test suite, test runner, 。

    ♦test fixture:The test fixture is everything we need to have in place to exercise the sut。簡單來說就是做一些測試過程中需要准備的東西,比如創建臨時的數據庫,文件和目錄等,其中 setUp() 和 setDown() 是最常用的方法

    ♦test case:用戶自定義的測試case的基類,調用run()方法,會依次調用setUP方法、執行用例的方法、tearDown()方法。

    ♦test suite:測試用例集合,可以通過addTest()方法手動增加Test Case,也可通過TestLoader自動添加Test Case,TestLoader在添加用例時,會沒有順序。

    ♦test runner:運行測試用例的驅動類,可以執行TestCase,也可執行TestSuite。執行后TestCase和Testsuite會自動管理TestResult。

其他的unitest的屬性:

    ♦unittest.skip():裝飾器,當運行用例時,有些用例可能不想執行等,可用裝飾器暫時屏蔽該條測試用例。一種常見的用法就是比如說想調試某一個測試用例,想先屏蔽其他用例就可以用裝飾器屏蔽。

      @unittest.skip(reason): skip(reason)裝飾器:無條件跳過裝飾的測試,並說明跳過測試的原因。

      @unittest.skipIf(reason): skipIf(condition,reason)裝飾器:條件為真時,跳過裝飾的測試,並說明跳過測試的原因。

      @unittest.skipUnless(reason): skipUnless(condition,reason)裝飾器:條件為假時,跳過裝飾的測試,並說明跳過測試的原因。

      @unittest.expectedFailure(): expectedFailure()測試標記為失敗。

2.TestCase類的屬性如下:

  ♦setUp():setUp()方法用於測試用例執行前的初始化工作。如測試用例中需要訪問數據庫,可以在setUp中建立數據庫連接並進行初始化。如測試用例需要登錄web,可以先實例化瀏覽器。

  ♦tearDown():tearDown()方法用於測試用例執行之后的善后工作。如關閉數據庫連接。關閉瀏覽器。

  ♦assert*():一些斷言方法:在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的。

    assertEqual(a,b,[msg='測試失敗時打印的信息']):斷言a和b是否相等,相等則測試用例通過。

    assertNotEqual(a,b,[msg='測試失敗時打印的信息']):斷言a和b是否相等,不相等則測試用例通過。

    assertTrue(x,[msg='測試失敗時打印的信息']):斷言x是否True,是True則測試用例通過。

    assertFalse(x,[msg='測試失敗時打印的信息']):斷言x是否False,是False則測試用例通過。

    assertIs(a,b,[msg='測試失敗時打印的信息']):斷言a是否是b,是則測試用例通過。

    assertNotIs(a,b,[msg='測試失敗時打印的信息']):斷言a是否是b,不是則測試用例通過。

    assertIsNone(x,[msg='測試失敗時打印的信息']):斷言x是否None,是None則測試用例通過。

    assertIsNotNone(x,[msg='測試失敗時打印的信息']):斷言x是否None,不是None則測試用例通過。

    assertIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中,在b中則測試用例通過。

    assertNotIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中,不在b中則測試用例通過。

    assertIsInstance(a,b,[msg='測試失敗時打印的信息']):斷言a是是b的一個實例,是則測試用例通過。

    assertNotIsInstance(a,b,[msg='測試失敗時打印的信息']):斷言a是是b的一個實例,不是則測試用例通過。

通過dir(unittest),我們可以看到unittest全部的屬性和方法,他們的關系如下圖所示。

 

 
unittest主要類關系:

  ♦正常調用unittest的流程是,TestLoader 自動將測試用例TestCase中加載到TestSuite里,TextTestRunner調用TestSuite的run方法,順序執行里面的TestCase中以test開頭的方法,並得到測試結果TestResult。在執行TestCase過程中,先進行SetUp()環境准備,執行測試代碼,最后tearDown()進行測試的還原。

  ♦其中TestLoader在加載過程中,進行添加的TestCase是沒有順序的。一個TestCase里如果存在多個驗證方法的話,會按照方法中test后方首字母的排序進行執行。

可以通過手動調用TestSuite的addTest、addTests方法來動態添加TestCase,這樣既可以確定添加用例的執行順序,也可避免TestCase中的驗證方法一定要用test開頭。

  ♦在搭建接口測試平台的時候,每新建一個接口的時,會自動生成一個 TestCase,選中運行單個接口時,使用TextTestRunner直接調用單個TestCase。運行多個接口時,手動給TestSuite添加TestCase,供TextTestRunner調用並生成測試結果。

一套整體的流程如下:

3.TestSuite類的屬性如下:(組織用例時需要用到):

  ♦addTest(): addTest()方法是將測試用例添加到測試套件中,如下方,是將test_baidu模塊下的BaiduTest類下的test_baidu測試用例添加到測試套件。

suite = unittest.TestSuite() suite.addTest(test_baidu.BaiduTest('test_baidu'))

4.TextTextRunner的屬性如下:(組織用例時需要用到):

  ♦run(): run()方法是運行測試套件的測試用例,入參為suite測試套件。

runner = unittest.TextTestRunner() runner.run(suite)

5.unitest的目錄結構一般如下:重要

                                    至此unitest的全部就講完了。


免責聲明!

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



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