python+pytest單元測試框架之fixture標識

  • 2019 年 10 月 11 日
  • 筆記

前言

fixture是pytest特有的功能,它用pytest.fixture標識,定義在函數前面。在你編寫測試函數的時候,你可以將此函數名稱做為傳入參數,pytest將會以依賴注入方式,將該函數的返回值作為測試函數的傳入參數。 fixture有明確的名字,在其他函數,模組,類或整個工程調用它時會被激活。 fixture是基於模組來執行的,每個fixture的名字就可以觸發一個fixture的函數,它自身也可以調用其他的fixture。 我們可以把fixture看做是資源,在你的測試用例執行之前需要去配置這些資源,執行完後需要去釋放資源。比如module類型的fixture,適合於那些許多測試用例都只需要執行一次的操作。 fixture還提供了參數化功能,根據配置和不同組件來選擇不同的參數。 fixture主要的目的是為了提供一種可靠和可重複性的手段去運行那些最基本的測試內容。比如在測試網站的功能時,每個測試用例都要登錄和退出,利用fixture就可以只做一次,否則每個測試用例都要做這兩步也是冗餘。

一、fixture基礎示例

1、在函數聲明之前加上「@pytest.fixture」。其他函數要來調用這個Fixture,只用把它當做一個輸入的參數即可

程式碼示例

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

運行結果

二、調用fixture的三種方式

第一種是每個函數前聲明,第二種是封裝在類里,類里的每個成員函數聲明,第三種是封裝在類里在前聲明。在可以看到3中不同方式的運行結果都是一樣。

1、第一種調用方式如上面所述

2、用fixture decorator調用fixture

decorator調用fixture

3、用autos調用fixture

fixture decorator一個optional的參數是autouse, 默認設置為False。 當默認為False,就可以選擇用上面兩種方式來試用fixture。 當設置為True時,在一個session內的所有的test都會自動調用這個fixture。 許可權大,責任也大,所以用該功能時也要謹慎小心。

autos調用fixture

三、fixture 返回值

fixture返回值都是默認None,我們可以選擇讓fixture返回我們需要的東西。如果你的fixture需要配置一些數據,讀個文件,或者連接一個資料庫,那麼你可以讓fixture返回這些數據或資源。如何帶參數 fixture還可以帶參數,可以把參數賦值給params,默認是None。對於param裡面的每個值,fixture都會去調用執行一次,就像執行for循環一樣把params里的值遍歷一次。

fixture 返回值