前言
fixture是pytest特有的功能,它用pytest.fixture標識,定義在函數(shù)前面。在你編寫測試函數(shù)的時候,你可以將此函數(shù)名稱做為傳入?yún)?shù),pytest將會以依賴注入方式,將該函數(shù)的返回值作為測試函數(shù)的傳入?yún)?shù)。 fixture有明確的名字,在其他函數(shù),模塊,類或整個工程調(diào)用它時會被激活。 fixture是基于模塊來執(zhí)行的,每個fixture的名字就可以觸發(fā)一個fixture的函數(shù),它自身也可以調(diào)用其他的fixture。 我們可以把fixture看做是資源,在你的測試用例執(zhí)行之前需要去配置這些資源,執(zhí)行完后需要去釋放資源。比如module類型的fixture,適合于那些許多測試用例都只需要執(zhí)行一次的操作。 fixture還提供了參數(shù)化功能,根據(jù)配置和不同組件來選擇不同的參數(shù)。 fixture主要的目的是為了提供一種可靠和可重復(fù)性的手段去運行那些最基本的測試內(nèi)容。比如在測試網(wǎng)站的功能時,每個測試用例都要登錄和退出,利用fixture就可以只做一次,否則每個測試用例都要做這兩步也是冗余。
一、fixture基礎(chǔ)示例
1、在函數(shù)聲明之前加上“@pytest.fixture”。其他函數(shù)要來調(diào)用這個Fixture,只用把它當做一個輸入的參數(shù)即可

運行結(jié)果:test_1和test_2運行之前都調(diào)用了before,也就是before執(zhí)行了兩次。默認情況下,fixture是每個測試用例如果調(diào)用了該fixture就會執(zhí)行一次的。

二、調(diào)用fixture的三種方式
第一種是每個函數(shù)前聲明,第二種是封裝在類里,類里的每個成員函數(shù)聲明,第三種是封裝在類里在前聲明。在可以看到3中不同方式的運行結(jié)果都是一樣。
1、第一種調(diào)用方式如上面所述
2、用fixture decorator調(diào)用fixture

3、用autos調(diào)用fixture
fixture decorator一個optional的參數(shù)是autouse, 默認設(shè)置為False。 當默認為False,就可以選擇用上面兩種方式來試用fixture。 當設(shè)置為True時,在一個session內(nèi)的所有的test都會自動調(diào)用這個fixture。 權(quán)限大,責任也大,所以用該功能時也要謹慎小心。

三、fixture 返回值
fixture返回值都是默認None,我們可以選擇讓fixture返回我們需要的東西。如果你的fixture需要配置一些數(shù)據(jù),讀個文件,或者連接一個數(shù)據(jù)庫,那么你可以讓fixture返回這些數(shù)據(jù)或資源。如何帶參數(shù) fixture還可以帶參數(shù),可以把參數(shù)賦值給params,默認是None。對于param里面的每個值,fixture都會去調(diào)用執(zhí)行一次,就像執(zhí)行for循環(huán)一樣把params里的值遍歷一次。?
