Pytest官方教程-01-安裝及入門

目錄:

  1. 安裝及入門
  2. 使用和調(diào)用方法
  3. 原有TestSuite使用方法
  4. 斷言的編寫和報告
  5. Pytest fixtures:清晰 模塊化 易擴展
  6. 使用Marks標記測試用例
  7. Monkeypatching/對模塊和環(huá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風格的setup/teardown
  18. 安裝和使用插件
  19. 插件編寫
  20. 編寫鉤子(hook)方法
  21. 運行日志
  22. API參考
    1. 方法(Functions)
    2. 標記(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導入機制及sys.path/PYTHONPATH
  26. 配置選項
  27. 示例及自定義技巧
  28. Bash自動補全設置

安裝及入門

Python支持版本: Python 2.6,2.7,3.3,3.4,3.5, Jython, PyPy-2.3
支持的平臺: Unix/Posix and Windows
PyPI包名: pytest
依賴項: py, colorama (Windows)
PDF文檔: 下載最新版本文檔

pytest是一個方便創(chuàng)建簡單病涨、可擴展性測試用例的框架。測試用例清晰觅够、易讀而無需大量的繁瑣代碼捧请。你幾分鐘內(nèi)便可針對你的應用程序或庫開展一個小型單元測試或者復雜功能測試。

安裝pytest

  1. 在你的命令行執(zhí)行以下命令
pip install -U pytest
  1. 檢查你是否安裝了正確的版本
$ pytest --version
This is pytest version 3.x.y, imported from $PYTHON_PREFIX/lib/python3.6/site-packages/pytest.py

創(chuàng)建你的第一個測試用例

使用簡單的4行代碼創(chuàng)建一個簡單的測試方法:

# test_sample.py文件內(nèi)容
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

就是這樣彰触。你可以執(zhí)行一下這個測試方法:

$ pytest
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 item

test_sample.py F                                                     [100%]

================================= FAILURES =================================
_______________________________ test_answer ________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
========================= 1 failed in 0.12 seconds =========================

由于func(3)并不等于5,這次測試返回了一個失敗報告。

注意:
你可以使用assert語句來驗證你測試用例的期望結果荞雏。pytest的高級斷言內(nèi)省機制可以智能地報告展示斷言表達式的中間值來避免來源于JUnit的方法中的變量名重復問題。

執(zhí)行多條測試

pytest會執(zhí)行當前目錄及子目錄下所有test_*.py*_test.py格式的文件平酿。一般來說凤优,它遵循標準的測試發(fā)現(xiàn)規(guī)則

斷言指定異常

使用raise可以用于斷言相應代碼的拋出的指定異常:

# test_sysexit.py文件內(nèi)容
import pytest
def f():
    raise SystemExit(1)

def test_mytest():
    with pytest.raises(SystemExit):
        f()

使用“安靜”模式蜈彼,執(zhí)行這個測試方法:

$ pytest -q test_sysexit.py
.                                                                    [100%]
1 passed in 0.12 seconds

使用類來組織測試用例

一旦你需要開發(fā)多條測試用例筑辨,你可能會想要使用類來組織它們。使用pytest可以很輕松的創(chuàng)建包含多條用例的測試類:

# test_class.py文件內(nèi)容
class TestClass(object):
    def test_one(self):
        x = "this"
        assert 'h' in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, 'check')

pytest可以發(fā)現(xiàn)所有遵循Python測試用例發(fā)現(xiàn)約定規(guī)則的用例幸逆,所以它能找到類外以及類中所有以test_開頭的方法棍辕。測試類無需再繼承任何對象。我們只需要簡單地通過文件名來運行這個模塊还绘。

$ pytest -q test_class.py
.F                                                                   [100%]
================================= FAILURES =================================
____________________________ TestClass.test_two ____________________________

self = <test_class.TestClass object at 0xdeadbeef>

    def test_two(self):
        x = "hello"
>       assert hasattr(x, 'check')
E       AssertionError: assert False
E        +  where False = hasattr('hello', 'check')

test_class.py:8: AssertionError
1 failed, 1 passed in 0.12 seconds

第一條用例執(zhí)行成功楚昭,第二天用例執(zhí)行失敗。你可以很容易地通過斷言中變量的中間值來理解失敗的原因拍顷。

功能測試中請求使用獨立的臨時目錄

pytest提供了內(nèi)置fixtures及方法參數(shù)來請求任意資源抚太,比如一個獨立的臨時目錄:

# test_tmpdir.py文件內(nèi)容
def test_needsfiles(tmpdir):
    print (tmpdir)
    assert 0

在測試函數(shù)參數(shù)中使用tmpdir,pytest將在測試函數(shù)調(diào)用之前查找并調(diào)用fixture工廠方法來創(chuàng)建資源。在測試運行之前尿贫,pytest創(chuàng)建一個每個測試唯一的臨時目錄:

$ pytest -q test_tmpdir.py
F                                                                    [100%]
================================= FAILURES =================================
_____________________________ test_needsfiles ______________________________

tmpdir = local('PYTEST_TMPDIR/test_needsfiles0')

    def test_needsfiles(tmpdir):
        print (tmpdir)
>       assert 0
E       assert 0

test_tmpdir.py:3: AssertionError
--------------------------- Captured stdout call ---------------------------
PYTEST_TMPDIR/test_needsfiles0
1 failed in 0.12 seconds

有關tmpdir處理的更多信息电媳,請參見: 臨時目錄和文件

進一步閱讀

查看其他pytest文檔資源,來幫助你建立自定義測試用例及獨特的工作流:

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市身冀,隨后出現(xiàn)的幾起案子钝尸,更是在濱河造成了極大的恐慌,老刑警劉巖搂根,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珍促,死亡現(xiàn)場離奇詭異,居然都是意外死亡剩愧,警方通過查閱死者的電腦和手機猪叙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仁卷,“玉大人穴翩,你說我怎么就攤上這事〗趸” “怎么了芒帕?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丰介。 經(jīng)常有香客問我背蟆,道長,這世上最難降的妖魔是什么哮幢? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任带膀,我火速辦了婚禮,結果婚禮上橙垢,老公的妹妹穿的比我還像新娘垛叨。我一直安慰自己,他們只是感情好柜某,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布嗽元。 她就那樣靜靜地躺著,像睡著了一般莺琳。 火紅的嫁衣襯著肌膚如雪还棱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天惭等,我揣著相機與錄音珍手,去河邊找鬼。 笑死,一個胖子當著我的面吹牛琳要,可吹牛的內(nèi)容都是我干的寡具。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼稚补,長吁一口氣:“原來是場噩夢啊……” “哼童叠!你這毒婦竟也來了?” 一聲冷哼從身側響起课幕,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤厦坛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乍惊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杜秸,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年润绎,在試婚紗的時候發(fā)現(xiàn)自己被綠了撬碟。 大學時的朋友給我發(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
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驼卖。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓氨肌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酌畜。 傳聞我的和親對象是個殘疾皇子怎囚,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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