Pytest官方教程-07-Monkeypatching,對模塊和環(huán)境進(jìn)行Mock

目錄:

  1. 安裝及入門
  2. 使用和調(diào)用方法
  3. 原有TestSuite使用方法
  4. 斷言的編寫和報告
  5. Pytest fixtures:清晰 模塊化 易擴(kuò)展
  6. 使用Marks標(biāo)記測試用例
  7. Monkeypatching/對模塊和環(huán)境進(jìn)行Mock
  8. 使用tmp目錄和文件
  9. 捕獲stdout及stderr輸出
  10. 捕獲警告信息
  11. 模塊及測試文件中集成doctest測試
  12. skip及xfail: 處理不能成功的測試用例
  13. Fixture方法及測試用例的參數(shù)化
  14. 緩存: 使用跨執(zhí)行狀態(tài)
  15. unittest.TestCase支持
  16. 運行Nose用例
  17. 經(jīng)典xUnit風(fēng)格的setup/teardown
  18. 安裝和使用插件
  19. 插件編寫
  20. 編寫鉤子(hook)方法
  21. 運行日志
  22. API參考
    1. 方法(Functions)
    2. 標(biāo)記(Marks)
    3. 鉤子(Hooks)
    4. 裝置(Fixtures)
    5. 對象(Objects)
    6. 特殊變量(Special Variables)
    7. 環(huán)境變量(Environment Variables)
    8. 配置選項(Configuration Options)
  23. 優(yōu)質(zhì)集成實踐
  24. 片狀測試
  25. Pytest導(dǎo)入機(jī)制及sys.path/PYTHONPATH
  26. 配置選項
  27. 示例及自定義技巧
  28. 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)文檔雹拄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末收奔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滓玖,更是在濱河造成了極大的恐慌坪哄,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势篡,死亡現(xiàn)場離奇詭異翩肌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)禁悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門念祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碍侦,你說我怎么就攤上這事粱坤。” “怎么了瓷产?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵站玄,是天一觀的道長。 經(jīng)常有香客問我濒旦,道長株旷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任尔邓,我火速辦了婚禮晾剖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梯嗽。我一直安慰自己钞瀑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布慷荔。 她就那樣靜靜地躺著雕什,像睡著了一般缠俺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贷岸,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天壹士,我揣著相機(jī)與錄音,去河邊找鬼偿警。 笑死躏救,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的螟蒸。 我是一名探鬼主播盒使,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼七嫌!你這毒婦竟也來了少办?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤诵原,失蹤者是張志新(化名)和其女友劉穎英妓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绍赛,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蔓纠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吗蚌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腿倚。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚯妇,靈堂內(nèi)的尸體忽然破棺而出敷燎,到底是詐尸還是另有隱情,我是刑警寧澤侮措,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布懈叹,位于F島的核電站,受9級特大地震影響分扎,放射性物質(zhì)發(fā)生泄漏澄成。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一畏吓、第九天 我趴在偏房一處隱蔽的房頂上張望墨状。 院中可真熱鬧,春花似錦菲饼、人聲如沸肾砂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镐确。三九已至包吝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間源葫,已是汗流浹背诗越。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留息堂,地道東北人嚷狞。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像荣堰,于是被迫代替她去往敵國和親床未。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容