pytest介紹及安裝
文章鏈接:https://mp.weixin.qq.com/s/mxCOVRIetU7efqMdseotkw
一. pytest介紹
pytest is a mature full-featured Python testing tool that helps you
write better programs. pytest is a framework that makes building simple
and scalable tests easy. Tests are expressive and readable—no
boilerplate code required.
—— 摘自 pytest 官方介紹,地址:http://www.pytest.org/en
pytest是一個(gè)成熟且功能齊全的Python測試工具,可以幫助您編寫更好的程序。pytest是一個(gè)框架,它使構(gòu)建簡單且可伸縮的測試變得容易。測試應(yīng)該是富有表現(xiàn)力和可讀性的 —— 不需要樣板代碼。
以上即對(duì)pytest官方介紹的翻譯,pytest具有以下一些特點(diǎn):
1 它既是一個(gè)軟件測試框架又是一款命令行工具;
2 簡單容易上手;
3 可以自動(dòng)發(fā)現(xiàn)測試用例并執(zhí)行;
4 斷言使用Python原生的assert語句,不需要記住self.assertEqual這樣的名稱;
5 支持運(yùn)行unittest和nose編寫的測試用例;
6 擁有豐富的插件體系結(jié)構(gòu),支持用戶自行開發(fā)的插件。
二. 安裝pytest
直接從官方PiPy源安裝pytest即可,進(jìn)入虛擬環(huán)境,輸入以下安裝命令:
安裝命令:pip install -U pytest
接下來檢查安裝版本的正確性,顯示安裝pytest工具的版本信息:
輸入命令:pytest --version
三. PyCharm配置
下面在PyCharm中新建項(xiàng)目及配置pytest。PyCharm 是一款由JetBrains開發(fā)的功能強(qiáng)大的Python
IDE(Integrated Development Environment
集成開發(fā)環(huán)境)工具,其提供了智能代碼完成、代碼檢查、即時(shí)錯(cuò)誤高亮顯示和快速修復(fù),以及自動(dòng)代碼重構(gòu)和豐富的導(dǎo)航功能。
在PyCharm中選擇“File-New Project”,彈出新建項(xiàng)目對(duì)話框后,依次選擇新建一個(gè)純Python項(xiàng)目,輸入項(xiàng)目名稱,選擇前面我們已經(jīng)建好的虛擬環(huán)境(pyenv_1)。
選擇“File - Settings”,彈出設(shè)置頁面后,選擇“Tools - Python Integrated
Tools”進(jìn)行Python集成工具的設(shè)置。在“Default test
runner”默認(rèn)測試運(yùn)行者處選擇“py.test”,即后續(xù)將pytest作為默認(rèn)的測試執(zhí)行工具。
四. 一個(gè)簡單的測試
下面我們新建一個(gè)簡單的測試用例,并以pytest的方式執(zhí)行先看看效果。新建一個(gè)普通的Python文件,命名為:test_01.py,輸入以下代碼:
def add(x, y):
return x + y
def test_add():
assert add(1, 9) == 10
首先定義了一個(gè)加法函數(shù)(add),返回兩個(gè)參數(shù)相加之和。其次針對(duì)這個(gè)加法函數(shù)編寫了一個(gè)測試用例(test_add),并通過Python原生的assert斷言,斷言調(diào)用該加法函數(shù)計(jì)算1加9之和預(yù)期是10。
這里的測試用例命名約定以“test_”開頭,pytest會(huì)自動(dòng)搜索并運(yùn)行該命名格式的測試用例。
在PyCharm中右鍵點(diǎn)擊“test_01.py”文件,從彈出的菜單中選擇“Run 'py.test in test_01.python'”,即通過pytest運(yùn)行選中的文件。
測試結(jié)果中顯示pytest自動(dòng)搜索到了一個(gè)測試項(xiàng)目,并自動(dòng)運(yùn)行了其中的測試用例,顯示的執(zhí)行進(jìn)度達(dá)到了100%,執(zhí)行結(jié)果顯示該測試通過。文件名后面的點(diǎn)“.”也表示執(zhí)行通過。
接下來修改前面的代碼,我們?cè)俣嗉右粋€(gè)測試用例,看看執(zhí)行結(jié)果有什么不同。
def add(x, y):
return x + y
def test_add1():
assert add(1, 9) == 10
def test_add2():
assert add(3, 0) == 3
執(zhí)行結(jié)果中顯示,發(fā)現(xiàn)了2個(gè)測試項(xiàng)目,而且顯示了兩個(gè)點(diǎn)“.”號(hào),說明有兩個(gè)測試用例均被執(zhí)行通過。
前面的代碼中,斷言結(jié)果全部通過,這次我們?cè)僖胍粋€(gè)注定要失敗的測試用例(斷言3加0等于8):
def add(x, y):
return x + y
def test_add1():
assert add(1, 9) == 10
def test_add2():
assert add(3, 0) == 8
這次可以從結(jié)果中非常清楚的看到,一共兩個(gè)測試條目,一個(gè)成功(用點(diǎn)表示),一個(gè)失敗(用F表示),而且下面顯示了具體失敗的代碼位置和異常類型。
——內(nèi)容引自微信公眾號(hào)《隔壁老王說測試》https://mp.weixin.qq.com/s/mxCOVRIetU7efqMdseotkw