Pytest03:pytes對測試函式常見處理方法
1.使用assert 宣告
pytest 已經簡化了斷言方法,直接用assert 就可以了, 說明pytest 已經重寫了assert 方法,
從而提供了更為詳細的失敗資訊,而且assert表示式變得簡潔。
-
執行的程式碼如下:
執行結果為如圖:
上圖中有個 “>” 指出執行錯誤的地方,“E” 是對錯誤的地方補充,
下邊指出哪個資料夾,並列出在第幾行且是什麼型別的錯誤。
我們繼續用 -v 輸出更詳細的錯誤資訊 ,看下圖:
2.預期異常
我們用with 語句進行抓取異常,並與表示式異常進行匹配,如果通過說明和我們預期一樣,驗證為pass
例子如下:
1.(with pytest.raises(TypeError):) 這個表示式是pytest 丟擲一個TypeError的異常
2.tasks.add(task=“string”) 這個表示式也會丟擲一個異常, pytest 會拿兩個異常assert 。
3.測試函式的標記
1.一個標記 可以應用在多個函式
2.一個函式可以有多個標記
3. 被標記的在不同資料夾也可以被執行
應用場景: 我們的目的只是做個冒煙,沒有必要對全量的case 進行執行,我們就可以把
需要smoke 的case 標記為 smoke 就可以了,到時候我們用 pytest -m “smok” 就ok。
具體如何標記呢 ?
語法為: @pytest.mark.marker_value , 如果標記smoke 可以用 @pytest.mark.smoke
舉例為:
test_assert.py :
import tasks,pytest @pytest.mark.single @pytest.mark.smoke def test_smoke1(): with pytest.raises(TypeError): tasks.add(task="string") @pytest.mark.smoke def test_smoke2(): with pytest.raises(TypeError): tasks.add(task="string") def test_except(): with pytest.raises(TypeError): tasks.add(task="string") @pytest.mark.smoke def test_smoke03(): with pytest.raises(TypeError): tasks.add(task="string") @pytest.mark.smoke def test_smoke04(): with pytest.raises(TypeError): tasks.add(task="string")
test_task.py:
import tasks
import pytest
@pytest.mark.smoke
def test_add_exception():
with pytest.raises(ValueError):
tasks.start_tasks_db('/','mysql')
def test_smoke05():
with pytest.raises(TypeError):
tasks.add(task="string")
執行結果:
也可以標記之間使用 and,or,not 關鍵字。
1.使用 and
and 是 要有 smoke 和 single 標籤 才能被執行,
or 是 執行 smoke 和 single 標籤的全部case
not smoke是 執行 沒有含smoke 的標籤。
例子如下:
4.跳過測試 (skip,skipif,xfail)
先理解他們之間的區別,我們再舉例說明是否能實現.
1.skip 只要標記skip不管是什麼都要skip,
2.skipif 是有條件的skip
3.xfail 前兩個標記之後,不會執行 ,xfail 標記會執行,只是提前告訴pytest預期失敗
1.執行之後不失敗 會顯示 Xpass,2.執行後失敗了會顯示 xfail
from collections import namedtuple
import pytest
Task=namedtuple('Task',['summary','owner','done','id'])
Task.__new__.__defaults__=(None,None,False,None)
@pytest.mark.skip(reason=" please skip,unsupport this case now")
#養成良好的習慣,當跳過的時候一定要加 reason ,同事看了就很明白了
def test_01():
t1=Task()
t2=Task()
assert t1 == t2
@pytest.mark.skipif(1>0,reason="不想執行")
#這個是條件執行,當表示式 True 就跳過,fail 就執行 ,同樣也要加上reason
def test_02():
t1=Task()
t2=Task()
assert t1 == t2
@pytest.mark.xfail
#預期是失敗的,結果執行通過, 會被標記為 Xpass
def test_03():
t1=Task()
t2=Task()
assert t1 == t2
@pytest.mark.xfail
#預期失敗,確實執行失敗了,會被標記為 xfail ,
def test_04():
t1=Task()
t2=Task()
assert t1 != t2
執行結果如下: