unittest框架命令行參數詳解一

-b,--buffer

在執行測試case時,若是case成功則case在執行過程當中輸出的內容不會被顯示出來,若是失敗則會。python

class TestLogin(unittest.TestCase):

    def test_login_by_password(self):
        a = 2
        print("這是運行成功時的輸出")
        assert a == 1 + 1

若是沒有-b參數,case執行成功時是有打印語句輸出的內容shell

若是加了-b參數就沒有這個輸出。測試

若是有-b參數,可是case運行失敗,則這個輸出仍是會有的debug

-b參數仍是比較有用的,當case執行成,實際上是不關心這些輸出的內容,只有在失敗的時候纔會看這些。3d

-c,--catch

在執行case的過程當中,若是按下command+c或control+c,用例不會當即中止而是等待當前的case運行完成而且輸出測試結果後才中斷程序,這個時候若是再次按下command+c或control+c,纔會當即終止程序,並拋出KeyboardInterrupt異常。調試

class TestLogin(unittest.TestCase):

    def test_login_by_password(self):
        b = 5
        a = 2
        time.sleep(4)
        print("這是運行成功時的輸出")
        assert a == 1 + 1

    def test_login_by_sms(self):
        print('這是test_login_by_sms')
        assert 2 == 2
    
    def tearDown(self) -> None:
        print("這是tearDown")

我在上面的代碼中加了teardown,來試試,試試試試。code

看控制檯的輸出,已經輸入了command+c,可是這條case仍是執行完畢了。blog

若是沒有有這個參數的話,直接按下command+c或control+c程序會當即中止,這時就會致使一個問題,teardown就不會執行了,好比teardown裏面有一些數據清理、資源釋放的操做,這些若是不處理可能會致使系統出現一些問題。那麼此時就能夠加上這個參數,保證teardown是能夠被執行到的。資源

-f,--failfast

當出現第一個錯誤或者case失敗時,中止運行其餘測試用例。這個參數通常是在咱們剛寫好用例進行調試的時候可使用,而在有定時任務執行case的時候則不能使用。get

仍是用上面那個例子,咱們讓第一個case失敗,而後看看運行狀況。

這裏就只運行了一個測試用例,另外一個沒有執行。

--locals

簡單寫個用例

class TestLogin(unittest.TestCase):

    def test_login_by_password(self):
        b = 5
        a = 3
        print("這是運行成功時的輸出")
        assert a == 1 + 1

當測試運行失敗時會輸出case中全部的局部變量。

上圖是沒有--locals參數的,case運行失敗,從輸出信息中只是能夠看出那裏有個斷言失敗,那麼a究竟是多少致使的失敗呢?可能還要去debug代碼,看看變量a的值。

可是若是咱們使用--locals參數呢

會輸出測試方法中全部的局部變量的值,對於咱們定位問題仍是頗有幫助的。

-k

根據子串或者Unix shell 風格的通配符去匹配測試類和方法,這個匹配是從加載器加載的全部測試方法中區匹配。

class TestLogin(unittest.TestCase):

    def test_login_by_password(self):
        b = 5
        a = 2
        print("這是運行成功時的輸出")
        assert a == 1 + 1

    def test_login_by_sms(self):
        print('這是test_login_by_sms')
        assert 2 == 2

這裏有兩個測試方法,可是我只想運行test_login_by_sms,此時就能夠用到-k參數

注意這裏的子串匹配是大小寫敏感的。

還可使用Unix shell 風格的通配符,是通配符不是正則哈。

模式 意義
* 匹配全部
? 匹配任何單個字符
[seq] 匹配 seq 中的任何字符
[!seq] 匹配任何不在 seq 中的字符

這玩意兒,我用的真很少。。下篇文章文章聊聊unittest的discovery模式

> 歡迎你們去 個人博客 瞅瞅,裏面有更多關於測試實戰的內容哦!!

相關文章
相關標籤/搜索