1安裝
pip install -U pytest
2.第一個(gè)簡(jiǎn)單的測(cè)試
test_sample.py
# -*- coding:utf-8 -*-
import pytest
# 求和方法
def add(x, y):
return x+y
def test_answer():
assert add(3, 1) == 5
在命令行執(zhí)行pytest
pytes`將在當(dāng)前目錄及其子目錄中運(yùn)行test _ * .py或* _test.py形式的所有文件慌随。
由測(cè)試報(bào)告可知,add(3祥诽,1)方法得到的結(jié)果是4饼煞,與斷言assert 不符
3.斷言引發(fā)異常
使用raises可以幫助我們斷言某些代碼會(huì)引發(fā)某個(gè)異常,新建一個(gè)sysexit_test.py文件痢掠,輸入以下代碼:
# -*- coding:utf-8 -*-
import pytest
def f():
raise RuntimeError() # 拋出RuntimeError異常
def test_mytest():
with pytest.raises(RuntimeError): # 斷言RuntimeError異常
f()
if __name__ == '__main__':
f()
通過‘安靜’報(bào)告模式執(zhí)行測(cè)試功能
雖然f()函數(shù)拋出了RuntimeError異常驱犹,但是該測(cè)試用例不會(huì)標(biāo)記為失敗。
我們將f()拋出的異常改為ImportError
def f():
raise ImportError() # 拋出ImportError異常
測(cè)試用例標(biāo)記了ImportError異常足画。
注:-q 為quiet雄驹。表示在安靜的模式輸出報(bào)告訴。加不加這個(gè)參有什么區(qū)別呢淹辞? 讀者可以對(duì)比一下兩次輸出的日志医舆。其實(shí),就是少了一些pytest的版本信息象缀。
4.測(cè)試類
pytest
發(fā)現(xiàn)遵循其Python測(cè)試發(fā)現(xiàn)約定的所有測(cè)試蔬将,因此它找到兩個(gè)test_
前綴函數(shù)。沒有必要繼承任何東西央星。我們可以通過傳遞文件名來(lái)運(yùn)行模塊:
由測(cè)試結(jié)果可知霞怀,一條通過,一條失敗莉给。
5.請(qǐng)求功能測(cè)試的唯一臨時(shí)目錄
fixture是pytest中的一個(gè)特性毙石,fixture可以請(qǐng)求任意資源廉沮,用文字不太好理解,我們就通過實(shí)例來(lái)理解吧徐矩。首先废封,通過以下命令可以找出所有pytest內(nèi)置的fixture:
pytest --fixtures
以tmpdir
這個(gè)內(nèi)置的fixture來(lái)演示,tmpdir能返回一個(gè)唯一的臨時(shí)目錄路徑丧蘸,新建一個(gè)test_tmpdir.py文件漂洋,輸入以下代碼:
# -*- coding:utf-8 -*-
def test_needsfiles(tmpdir):
print tmpdir
assert 0