6.pytest 強大的 fixture (上)
pytest強大的fixture(上)
測試fixture的目的是提供一個測試的基線,在此基線基礎上,可以更可靠的進行重複測試。Pytest的 fixture相對於傳統的xUnit的setup/teardown函式做了顯著的改進:
測試fixture有明確的名稱,通過在函式/模組/類或者整個專案中啟用來使用 。
測試fixture是模組化的實現,使用fixture名即可觸發特定的fixture,fixture可以在其他fixture中 進行使用 。
測試fixture不僅可以進行簡單的單元測試,也可以進行復雜的功能測試。可以根據配置和元件的 選項進行引數化定製測試,或者跨函式/類/模組或者整個測試過程進行測試。
作為函式入參的fixture
測試函式可以通過接受一個已經命名的fixture物件來使用他們。對於每個引數名,如果fixture已經宣告定義,會自動建立一個例項並傳入該測試函式。fixture函式通過裝飾器標誌@pytest.fixture來註冊。下面是一個簡單的獨立的測試模組,包含一個fixture及使用它的測試函式
# test_fixture.py
import pytest
@pytest.fixture
def smtp_connection():
import smtplib
return smtplib.SMTP("smtp.qq.com", 587, timeout=5)
def test_ehlo(smtp_connection):
response, msg = smtp_connection.ehlo()
assert response == 250
assert 0 # 用於除錯
這裡,test_ehlo需要smtp_connection這個fixture的返回。pytest會在@pytest.fixture的fixture中查詢並呼叫名為smtp_connection的fixture。執行這個測試結果如下:
(pytest) D:\study\auto-pytest>pytest test_fixture.py
=============================== test session starts ===============================
platform win32 -- Python 3.7.1, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: D:\study\auto-pytest
collected 1 item
test_fixture.py F [100%]
=============================== FAILURES ===============================
_______________________________ test_ehlo _______________________________
smtp_connection = <smtplib.SMTP object at 0x0000014FA26653C8>
def test_ehlo(smtp_connection):
response, msg = smtp_connection.ehlo()
assert response == 250
> assert 0 # 用於除錯
E assert 0
test_fixture.py:11: AssertionError
=============================== short test summary info ===============================
FAILED test_fixture.py::test_ehlo - assert 0
=============================== 1 failed in 0.31s ===============================
測試的回顯中可以看出測試函式呼叫了smtp_connection,這是由fixture函式建立的smtplib.SMTP() 的一個例項。該函式在我們故意新增的assert 0處失敗。以下是pytest的在呼叫該函式的時候的詳細規則:
- pytest找到以test_作為字首的測試用例test_ehlo。該測試函式有一個名為smtp_connection的 入參。而在fixture函式中存在一個名為smtp_connection的fixture。
- smtp_connection()被呼叫來建立一個例項。
- test_ehlo()被呼叫並在最後一行因為斷言失敗。注意,如果拼錯了函式引數,或者使用了一個不可用的引數,你會看到一個包含可用函式引數列表的錯誤資訊
注意:你可以使用 pytest --fixtures test_fixture.py
來檢視可用的fixture(如果想檢視以_開頭的fixture,請新增-v引數)
conftest.py:共享fixture函式
實現測試用例的過程中,當你發現需要使用來自多個檔案的fixture函式的時候,可以將這些fixture函式放到conftest.py中。
你不需要匯入這些fixture函式,它會由pytest自動檢索。
fixture函式的檢索順序是從測試類開始,然後測試的模組,然後就是conftest.py檔案,最後是內建的外掛和第三方外掛。
你還可以使用conftest.py來為本地每個目錄實現外掛 。
相關文章
- 7.pytest 強大的 fixture (中)
- 8.pytest 強大的 fixture (下)
- 七、fixture 的用例管理
- pytest fixture 使用
- pytest 精通 fixture
- pytes中fixture的scope: 決定可以在什麼範圍內共享fixture
- Pytest學習(四) - fixture的使用
- 強大靈活的檔案上傳庫:FilePond 詳解
- 強大!Nginx 配置線上一鍵生成“神器”Nginx
- 強大的ognl
- pytest(6)-Fixture(韌體)
- 一款線上的POc,CVE,EXP漏洞利用線上搜尋引擎很強大!
- 強大的Github ActionsGithub
- 強大的set容器
- android強大的SpannableStringBuilderAndroidUI
- awk的強大操作
- 強大的 VS Code
- 原創|強大!Nginx 配置線上一鍵生成“神器”Nginx
- 【pytest】fixture 與 setup, teardown 的優先順序
- pytest:通過scope控制fixture的作用範圍
- Mac上專業強大的圖片降噪軟體Topaz DeNoise AI for MacMacAI
- python @pytest.fixture示例及用法Python
- pytest進階之fixture函式函式
- vim之強大的global
- 強大的 Guava 工具類Guava
- 強大的CAS機制
- SecureCRT 註冊碼啟用版最新:mac上強大的ssh工具推薦SecurecrtMac
- 強大的CSS:濾鏡和混合模式處理的圖片如何上傳下載?CSS模式
- Pytest測試框架(三):pytest fixture 用法框架
- 強大的動態 LINQ 庫
- 威力強大的Linux sudo 命令Linux
- GoFrame - 強大的工具鏈集合GoFrame
- 向強大的SVG邁進SVG
- Chrome的強大搜尋功能Chrome
- 簡單又強大的SHELL
- 強大的Array.prototype.splice()
- 強大的Stream並行流並行
- Downie 4 for Mac:強大的影片下載工具,輕鬆獲取線上資源Mac