前幾天,在一個羣裏,一我的問了,這樣一個問題。說他面試遇到一個面試官,問他,爲啥unittest的測試用例要用test 開頭,能不能定製化。他不知道爲啥。python
看到這個題目,我回答固然能夠了,能夠用leizi開頭。 可能你不信,那麼今天雷子來給你實現下。看我說的是否是真的。那麼我來實現下,我不修改前,看看用leizi開頭命名的測試用例是否能夠執行。面試
import unittest
class testone(unittest.TestCase):
def leizi1(self):
self.assertTrue(True)
def leizi2(self):
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__": unittest.main()
運行:ruby
就運行了一個測試用例。leizi開頭的測試用例沒有執行。我要變,我要讓它只執行leizi開頭的測試用例。微信
通過個人修改,咱們看下,仍是上面的測試用例,咱們看下執行結果函數
執行了兩個測試用例,究竟是不是leizi開頭的呢,咱們來打印下,看看是否執行的是leizi的用例。測試
import unittest
class testone(unittest.TestCase):
def setUp(self) -> None:pass
def tearDown(self) -> None:pass
def leizi1(self):
print("leizitest")
self.assertTrue(True)
def leizi2(self):
print("leizitest")
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__":
unittest.main()
結果:spa
打印的結果與預期徹底一致。那麼雷子是怎麼作到的,我先來給你解析一下。首先咱們使用的unittest.main()加載運行的測試用例,咱們能夠去找這個main方法,在源碼中能夠發現code
咱們能夠看到有這個TestProgram這個裏面的,有這麼一個函數,那麼咱們對應的去看看這個裏面的方法 。blog
默認加載的是defaultTestLoader,那麼我去看看這裏面有沒有咱們想要的。ip
這裏咱們能夠看到 是一個類,這裏有個定義的 test,咱們看看。接下來是怎麼用的。
咱們能夠搜索下,在這個類裏面下面有一個獲取測試用例名稱的,這個地方判斷了 測試用例名稱調用了這個值,咱們能夠改下試試,testMethodPrefix的值改爲leizi試試。仍是上面的測試函數。
import unittestclass testone(unittest.TestCase):
def leizi1(self):
print("leizitest")
self.assertTrue(True)
def leizi2(self):
print("leizitest")
self.assertTrue(True)
def testone(self):
self.assertTrue(True)
if __name__=="__main__":
unittest.main()
結果:
只執行了leizi開頭的,咱們修改爲功了。
回到上面這個面試題。咱們在面試的時候都會遇到這種狀況,其實這個時候咱們若是沒有作過或者看過源碼,能夠回答,在我目前的獲得的知識中,就是以test開頭的,可是要是定製,我要看下源碼,是否能夠定製。若是你看過源碼,那就直接說 我知道在哪一個文件下面的 什麼值能夠直接修改。
面試不難,面試題也不難。
學會解答,能給出方案來。
惟有變化,應對萬變題目。
題目惟一,方案變幻無窮。
合理思路,方案有理有據。
基於需求,給定方案便可。
關注雷子說測試,天天帶你分享不同的東西。
若是你感受有用,能夠收藏,分享給你們。幫助你們一塊兒成長。
有問題也能夠和我交流。qq&微信:952943386