一、簡要描述
在自動化測試過程中,為測試用例提前准備的一個運行環境,這個測試環境被稱為測試夾具。
測試夾具的本質是一個函數,在函數上方加上@pytest.fixture()聲明即可成為夾具。
在測試用例方法執行之前的稱為前置條件,測試用例方法執行之后的稱為后置條件。以yield作為標記,yield之前的代碼為前置條件執行的代碼,反之為后置條件執行的代碼。
在夾具中的yield后面可以傳遞參數(想要返回的值),即前置條件的返回值。yield與return類似,可以有返回值,但yield不一樣,執行完yield之后還可以繼續往下運行,而函數遇到return就終止了。

二、使用方式
方法一:把夾具的函數名稱作為參數傳到測試用例函數當中。若要獲取夾具的返回值,可以直接使用夾具函數名稱。

方法二:在測試用例函數上方添加@pytest.mark.usefixtures()標記,並將夾具函數名稱傳遞到usefixtures()中,可以傳多個值,如@pytest.mark.usefixtures('function_before', 'function_two')。不能接受夾具的返回值,即測試用例函數中要使用夾具的返回值時,該方法不適用。

三、作用域
根據@pytest.fixture()中scope參數不同,作用域區分如下:
function(函數):每個測試用例函數執行時都會執行一次,默認值
class(類):不論有多少測試用例,整個類只會運行一次
module(模塊):不論有多少測試用例,整個模塊(文件)下只運行一次
package(包):不論有多少測試用例,整個包(文件夾)下只運行一次
session:不論有多少測試用例,整個pytest下只會運行一次


四、自動使用
將@pytest.fixture()中autouse參數設為True,即可自動使用夾具,不需要一個個傳參數,默認值為False。

五、conftest.py
共享夾具fixture,將夾具單獨存放到conftest.py中(文件名稱是固定的,文件放在項目根目錄),用例模塊不需要導入模塊名,就可以直接使用。


