目錄:
- 安裝及入門
- 使用和調(diào)用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴(kuò)展
- 使用Marks標(biāo)記測試用例
- Monkeypatching/對模塊和環(huán)境進(jìn)行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數(shù)化
- 緩存: 使用跨執(zhí)行狀態(tài)
- unittest.TestCase支持
- 運行Nose用例
- 經(jīng)典xUnit風(fēng)格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優(yōu)質(zhì)集成實踐
- 片狀測試
- Pytest導(dǎo)入機(jī)制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設(shè)置
Monkeypatching,對模塊和環(huán)境進(jìn)行Mock
有時汽畴,測試需要調(diào)用依賴于全局設(shè)置的功能喉钢,或調(diào)用無法輕松測試的代碼(如網(wǎng)絡(luò)訪問)请祖。 monkeypatch fixture可幫助您安全地設(shè)置/刪除屬性,字典項或環(huán)境變量,或修改sys.path以進(jìn)行導(dǎo)入。 請參閱monkeypatch博客文章,了解一些介紹材料并討論其動機(jī)。
簡單示例: 猴子補丁方法
如果你想阻止os.expanduser
返回某個目錄撕彤,你可以在測試方法調(diào)用其之前,使用monkeypatch.setattr()
方法改造這個函數(shù):
# test_module.py文件內(nèi)容
import os.path
def getssh(): # 偽應(yīng)用代碼
return os.path.join(os.path.expanduser("~admin"), '.ssh')
def test_mytest(monkeypatch):
def mockreturn(path):
return '/abc'
monkeypatch.setattr(os.path, 'expanduser', mockreturn)
x = getssh()
assert x == '/abc/.ssh'
這里在我們的測試方法中猛拴,使用猴子補丁改造了os.path.expanduser
羹铅, 然后再進(jìn)行調(diào)用。 測試執(zhí)行完成后對os.path.expanduser
修改將被撤消愉昆。
示例:阻止"requests"庫的遠(yuǎn)程操作
如果要阻止"requests"庫在所有測試中執(zhí)行http請求职员,你可以執(zhí)行以下操作:
# conftest.py文件內(nèi)容
import pytest
@pytest.fixture(autouse=True)
def no_requests(monkeypatch):
monkeypatch.delattr("requests.sessions.Session.request")
每個測試方法執(zhí)行時都會自動使用該fixture,它將刪除測試方法內(nèi)置屬性中的request.session.Session.request
跛溉,以便在測試中任何使用requests庫創(chuàng)建http請求的用例都將失敗焊切。
注意:
不建議使用猴子補丁改造Python內(nèi)置函數(shù)扮授,如open,compile等专肪,因為它可能會破壞pytest的內(nèi)部邏輯刹勃。 如果必須要使用,你可以通過參數(shù):--tb = native
嚎尤,- tables = plain
和--capture = no
來試試荔仁,不一定不會有問題。
注意:
改造stdlib
函數(shù)和pytest依賴的某些第三方庫本身可能會破壞pytest诺苹,因此在這些情況下咕晋,建議使用MonkeyPatch.context()
來改造這些模塊:
import functools
def test_partial(monkeypatch):
with monkeypatch.context() as m:
m.setattr(functools, "partial", 3)
assert functools.partial == 3
查看#3290號bug詳情
API參考
查閱MonkeyPatch類相關(guān)文檔雹拄。