unittest加載測試用例名稱必須以test開頭,是否可以定制化


​        

        前幾天,在一個群里,一個人問了,這樣一個問題。說他面試遇到一個面試官,問他,為啥unittest的測試用例要用test 開頭,能不能定制化。他不知道為啥。

        看到這個題目,我回答當然可以了,可以用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()

  

 
        

        運行:

        就運行了一個測試用例。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()

    結果:

    

打印的結果與預期完全一致。那么雷子是怎么做到的,我先來給你解析一下。首先我們使用的unittest.main()加載運行的測試用例,我們可以去找這個main方法,在源碼中可以發現

我們可以看到有這個TestProgram這個里面的,有這么一個函數,那么我們對應的去看看這個里面的方法  。

默認加載的是defaultTestLoader,那么我去看看這里面有沒有我們想要的。

    

 

這里我們可以看到 是一個類,這里有個定義的 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

    

 


免責聲明!

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



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