pytest官方文檔解讀fixtures
在深入瞭解fixture之前,讓我們先看看什麼是測試。
一、測試的構成
其實說白瞭,測試就是在特定的環境、特定的場景下、執行特定的行為,然後確認結果與期望的是否一致。
就拿最常見的登錄來說,完成一次正常的登錄場景,需要可用的測試環境,可以正常登錄的賬號和密碼。然後,用這個賬號密碼進行登錄操作,結果登錄成功,符合這次正常登錄場景的預期結果,測試完成。
這樣看來,通常就可以把測試分為4個步驟:
- Arrange
- Act
- Assert
- Cleanup
Arrange
,可以理解為 除瞭執行測試之外的任何事情。比如上面例子中,我得有個可用的測試環境跟可用的賬號密碼,這些都要事先準備好。此外,還有可能是:啟動/終止服務、將記錄輸入數據庫、定義要查詢的URL、為還不存在的用戶生成一些憑據等等。
總之,就是為瞭能夠進行測試要準備好的事情。
Act
,相比準備前置環境,Act做的事情就相對單一些,其實就是開始測試動作。比如,接口測試裡,調用被測試的api接口。
Assert
,Assert是我們查看結果的地方,看看是否像我們預期的那樣。比如接口請求成功後,數據的接口會返回“success”,assert status == "success"。
Cleanup
,在測試結束後,做清理工作,為瞭其他的測試不會意外的受到本次測試的影響。比如,測試之前我插入瞭一條測試數據,測試完後,我把它刪掉。
總得來說,測試就是Act+Assert,而其他要安排的事情,放在Arrange裡。
二、回到fixtures本身
而在pytest中,fixtures就是來做Arrange的事情。當然瞭,fixture也不局限於此,如果測試足夠復雜的話,不妨也可以在裡面進行act的事情。
把一個普通的函數變成fixtures非常簡單,隻要加上@pytest.fixture這個裝飾就成:
import pytest class Fruit: def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name @pytest.fixture def my_fruit(): # 這裡是一個fixture,返回瞭一個Fruit對象,名字叫蘋果 return Fruit("蘋果") @pytest.fixture def fruit_basket(my_fruit): # 這裡是另一個fixture,同樣聲明一個Fruit對象,名字叫香蕉。 # 然後在這個fixture中又傳入瞭上一個fixture:my_fruit # 最後把最終的返回裝到一個列表[]裡,返回 return [Fruit("香蕉"), my_fruit] def test_my_fruit_in_basket(my_fruit, fruit_basket): # 這是一個測試函數,可以使用多個fixture assert my_fruit in fruit_basket
上面的代碼體現瞭fixtures的2個重要特性:
- 測試函數可以使用多個fixture
- fixture本身還可以使用其他的fixture
接下來,我將繼續跟著官方文檔解讀fixture的特點。
以上就是pytest官方文檔解讀fixtures的詳細內容,更多關於pytest解讀fixtures的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- pytest官方文檔解讀fixtures的調用方式
- pytest官方文檔解讀fixtures調用fixtures及fixture復用性
- pytest解讀fixture有效性及跨文件共享fixtures
- pytest解讀一次請求多個fixtures及多次請求
- Pytest框架 conftest.py文件的使用詳解