fixture屬於pytest中的乙個方法,fixture是在測試函式執行前後進行執行的,fixture的命名不規範沒有強制要求,以及裡面的**內容可以自己進行定製從而滿足多種測試需求,配置測試前的資料清理,以及測試完成後的資料管理。fixture中的**處理測試後的**為 yield
測試開始前會執行yield前面的**(setup),測試完成後將執行yield後面的**(teardown),在fixture中不是強制必須有yield,比如,我只有前置**,沒有後置**,那就不需要yield內容。或者只有後置**,沒有前置**。無論測試過程中發生什麼錯誤,yield後續的**都會被執行
原始碼:
def fixture( #通過上面的原始碼可以看到fixture一共有5個引數分別是:name,scope,params,autouse,ids。每個引數在後面都會介紹到,這裡安靜就先不做太多介紹。noqa: f811
fixture_function: optional[_fixturefunction] =none,
*,scope:
"union[_scope, callable[[str, config], _scope]]
" = "
function",
params: optional[iterable[object]] =none,
autouse: bool =false,
ids: optional[
union[
iterable[union[none, str, float, int, bool]],
callable[[any], optional[object]],
]] =none,
name: optional[str] =none
) -> union[fixturefunctionmarker, _fixturefunction]:
栗子:
安靜拿開頭說的那個案例,如果乙個測試類下用例,有的需要登入,有的必須要登入操作
importpytest
@pytest.fixture()
deflogin():
print('
輸入賬號,輸入密碼')
print('
完成登入功能!!!!')
yield
print('
---退出登入---')
class
test_login():
deftest_01(self,login):
print('
這是用例01')
print('
需要用到登入!')
deftest_02(self):
print('
這是用例02')
print('
不需要登入!')
deftest_03(self,login):
print('
這是用例03')
print('
這裡需要用到登入!')
這裡會發現,我在用例1和用例3中進行通過fixture進行使用,然後用例1和用例3都執行了配置的登入和退出登入內容。用例2,我沒用使用fixture方法,所以沒用執行對應**。
也可以通過--setup-show的方法來檢視詳細的fixture資訊
在乙個測試用例中可以使用多個fixture的方法,執行順序根據你傳入的順序進行執行。
importpytest
@pytest.fixture()
deflogin():
print('
輸入賬號,輸入密碼')
print('
完成登入功能!!!!')
yield
print('
---退出登入---')
@pytest.fixture()
defadd():
print('
測試開始執行!')
class
test_login():
deftest_01(self,login,add):
print('
這是用例01')
print('
需要用到登入!')
deftest_02(self):
print('
這是用例02')
print('
不需要登入!')
deftest_03(self,add,login):
print('
這是用例03')
print('
這裡需要用到登入!')
結果可以看出來,用例1:把login方法的fixture放在了前面,先執行的login方法後執行的add,用例3:add方法在前面,login方法在後面,執行也是add先執行,login後執行。
其實fixture之間也是可以進行相互呼叫的。
importpytest
@pytest.fixture()
deflogin():
print('
輸入賬號,輸入密碼')
print('
完成登入功能!!!!')
yield
print('
---退出登入---')
@pytest.fixture()
defadd(login):
print('
測試開始執行!')
yield
print('
測試結束!')
class
test_login:
deftest_01(self, add):
print('
------用例01------')
deftest_02(self):
print('
------用例02------')
deftest_03(self,login):
print('
------用例03------')
通過上面的執行結果可以看到,我們fixture中的login函式被add函式進行呼叫了,然後在用例中直接執行add,login中的內容也進行了執行
在前面介紹fixture的時候說過,fixture執行過程中,無論遇到什麼異常,都會繼續執行yeild後面的**(teardown),安靜舉例給大家看看
importpytest
@pytest.fixture()
deflogin():
print('
輸入賬號,輸入密碼')
print('
完成登入功能!!!!')
yield
print('
---退出登入---')
class
test_login():
deftest_01(self,login):
print('
這是用例01')
print('
需要用到登入!')
assert 1==2
deftest_02(self):
print('
這是用例02')
print('
不需要登入!')
deftest_03(self,login):
print('
這是用例03')
print('
這裡需要用到登入!')
從例子中很清楚的就發現我們的後置**在報錯的情況下也會執行。在自動化測試過程中,無論測試結果如何,測試資料是肯定能清理的很乾淨。
安靜簡單的介紹了fixture的用法,其實安靜覺得pytest中最實用的也就是fixture,後續安靜會慢慢的一點點進行補充。
pytest fixture功能學習
目錄 一 使用pytest.fixture入參測試 二 使用pytest.fixture入參,資料分離 三 使用pytest.mark.parametrize 入參測試 被測試 is leap year.py def is leap year year 先判斷year是不是整型 if isinsta...
Ant Design簡單簡單簡單執行
config 配置檔案 config.js 路由定義檔案 路徑檔案 defaultsettings.js 主題顏色以及標題配置檔案 plugin.config.js 沒怎麼用過的配置檔案 dist 構建專案之後產生的檔案 mock mock資料檔案 用於本地開發使用 node modules 資源檔...
簡單題目不簡單回答
1 const變數與巨集的區別 2.程式的變數怎麼儲存的?3.巨集和列舉有什麼區別,定義陣列時使用列舉和使用巨集的區別 4.const變數是否可以做陣列下標 5.static的用法,static修飾類的方法時,是什麼意思 6.設計模式熟不熟?寫乙個最簡單的單例模式 7.如何用c實現物件導向 8.程式...