Python--unittest框架

2.單元測試unittest

Python裏面也有單元測試框架-unittest,至關因而一個Python版的junitPython裏面的單元測試框架除了unittest,還有一個pytest框架,這個用的比較少.html

2.1 unittest執行順序

測試用例那麼多,那用例是按什麼規則運行的呢?瀏覽器

 

實例:框架

import unittest
import time

class Test(unittest.TestCase):
    def setUp(self):
        print "start!"

    def tearDown(self):
        time.sleep(1)
        print "end!"

    def test01(self):
        print "執行測試用例01"

    def test03(self):
        print "執行測試用例03"

    def test02(self):
        print "執行測試用例02"

    def addtest(self):
        print "add方法"

if __name__ == "__main__":
    unittest.main()函數

總結單元測試

1.執行順序:測試

start!-執行測試用例01-end!spa

start!-執行測試用例02-end!3d

start!-執行測試用例03-end!htm

2.從執行結果能夠看出幾點對象

先執行的前置setUp,而後執行的用例(test*),最後執行的後置tearDown

測試用例(test*)的執行順序是根據01-02-03執行的,也就是說根據用例名稱來順序執行的

addtestself)這個方法沒執行,說明只執行test開頭的用例

2.2 unittest裝飾器

2.1的例子能夠看到start和end,執行了三次,若是用例有幾百上千條時,若是這樣執行,那就會浪費不少時間。有沒有辦法,start和end只須要執行一次,就須要用到裝飾器。裝飾器爲:@classmethod

 

實例:

import unittest
import time

class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):# 括號內cls是可任一寫,習慣寫成cls
        print "start!"

    @classmethod
    def tearDownClass(cls):
        time.sleep(1)
        print "end!"

    def test01(self):
        print "執行測試用例01"

    def test03(self):
        print "執行測試用例03"

    def test02(self):
        print "執行測試用例02"

    def addtest(self):
        print "add方法"

if __name__ == "__main__":
    unittest.main()

運行結果:

start!
執行測試用例01
執行測試用例02
執行測試用例03
...end!

從執行結果能夠看出,前置和後置在執行用例前只執行了一次。

1、setUp與setUpClass區別

1.setup():每一個測試case運行前運行
2.teardown():每一個測試case運行完後執行
3.setUpClass():必須使用@classmethod 裝飾器,全部case運行前只運行一次
4.tearDownClass():必須使用@classmethod裝飾器,全部case運行完後只運行一次

5.@是修飾符,classmethod是Python裏的類方法

2.3 unittest批量執行

咱們在執行用例時,單個少許的用例好執行,那麼有多個腳本的時候,如何批量執行呢?這時候就須要用到unittest裏面的discover方法來加載用例了。

 

第一步:新建測試項目

  1. pycharm左上角File>New Projetc,location位置命名一個測試工程的名稱:laozhutest,而後保存

 

  1. 選中剛纔新建的工程右鍵>New>Python Package>新建一文件夾,如:baidu

 

3.重複第2個步驟再建一個add文件夾,裏面分別有兩個用例的腳本,以下圖所示。

test_01,test_02,test_03,test_04是咱們寫用例的腳本

 

  1. laozhutest右鍵建立一個腳本run_all_case.py,接下來用這個腳本去批量執行全部的用例。

 

 

2、diascover加載測試用例

1.discover方法裏面有三個參數:

case_dir:這個是待執行用例的目錄。

pattern:這個是匹配腳本名稱的規則,test*.py意思是匹配test開頭的全部腳本。

top_level_dir:這個是頂層目錄的名稱,通常默認等於None就好了。

2.discover加載到的用例是一個list集合,須要從新寫入到一個list對象testcase裏,這樣就能夠用unittest裏面的TextTestRunner這裏類的run方法去執行。

 

3、run測試用例

1.爲了更方便的理解,能夠把上面discover加載用例的方法封裝下,寫成一個函數

 

2.4 unittest生成測試報告

批量執行完用例後,生成的測試報告是文本形式的,不夠直觀,爲了更好的展現測試報告,最好是生成HTML格式的。

unittest裏面是不能生成html格式報告的,須要導入一個第三方的模塊:HTMLTestRunner

1、導入HTMLTestRunner

1.這個模塊下載不能經過pip安裝了,只能下載後手動導入,下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html

 

 

 

 

2.DownloadHTMLTestRunner.py文件就是咱們須要下載的包。

3.下載後複製到Python安裝文件的Lib目錄下

 

2、生成html測試報告

1.這裏主要有三個參數:

stream:測試報告寫入文件的存儲區域

title:測試報告的主題

description:測試報告的描述

  1. report_path是存放測試報告的地址

 

 

 

運行腳本後在F盤指定位置就能找到這個測試報告文件,這時候若是文件多了,不知道測試報告在哪天生成的?可否在文件名上顯示一個日期和時間呢?固然是能夠的!

 

 

 

備註:

%Y-%m-%d爲年月日

%H-%M爲時分  注意:時間之間不能使用冒號(:)由於文件名不能使用冒號

3、測試報告詳情

1.找到測試報告文件,用瀏覽器打開,點開View裏的Detail能夠查看詳情描述。

 

 

 

紅框中內容顯是英文,咱們不能直觀看出是什麼測試用例,能夠在測試代碼中添加中文註釋,註釋前面要加字母u,代碼修改以下:

 

 

 

4、再次運行run_all_case腳本文件後,查看HTML測試報告

 

 

 

2.5 unittest斷言

Python在 unittest.TestCase 類中提供了不少斷言方法。斷言方法檢查你認爲應該知足的條件是否確實知足。若是該條件確實知足,你對程序行爲的假設就獲得了確認,你就能夠確信其中沒有錯誤。若是你認爲應該知足的條件實際上並不知足,Python將引起異常。下表描述了6個經常使用的斷言方法。使用這些方法可覈實返回的值等於或不等於預期的值、返回的值爲 True 或 False 、返回的值在列表中或不在列表中。你只能在繼承 unittest.TestCase 的類中使用這些方法。

unittest經常使用的斷言方法

方法

用途

assertEqual(a, b)

覈實 a == b

assertNotEqual(a, b)

覈實 a != b

assertTrue(x)

覈實 x True

assertFalse(x)

覈實 x False

assertIn( item ,  list )

覈實 item list

assertNotIn( item ,  list )

覈實 item 不在 list

3、unittest經常使用的斷言方法

1.assertEqual(self, first, second, msg=None)

--判斷兩個參數相等:first == second

2.assertNotEqual(self, first, second, msg=None)

--判斷兩個參數不相等:first = second

3.assertIn(self, member, container, msg=None)

--判斷是字符串是否包含:member in container

4.assertNotIn(self, member, container, msg=None)

--判斷是字符串是否不包含:member not in container

5.assertTrue(self, expr, msg=None)

--判斷是否爲真:expr is True

6.assertFalse(self, expr, msg=None)

--判斷是否爲假:expr is False

7.assertIsNone(self, obj, msg=None)

--判斷是否爲Noneobj is None

8.assertIsNotNone(self, obj, msg=None)
--判斷是否不爲Noneobj is not None

 

實例:assertEqual(a, b),其它的斷言方法請自行償試)

 

2.6 Pythonunittest區別

重點:

Python模式運行後,會出現測試報告

unittest模式運行後,不會出現測試報告

相關文章
相關標籤/搜索