1. 程式人生 > >Pytest03:pytes對測試函式常見處理方法

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


執行結果如下:
在這裡插入圖片描述