python-pytest學習(八)-assert斷言


一、前言

  斷言是自動化測試基本最重要的一步,一個用例沒有斷言,就等於失去自動化測試的意義了。什么是斷言呢?

  簡單來講就是實際結果和期望結果去對比,符合預期就測試pass,不符合預期結果就測試failed

二、assert

  pytest允許您使用標准python斷言來驗證python測試中的期望和值。例如

def f():
    return 3

def test_function():
    assert f()==4

運行結果:

 

 從報錯信息可以看到斷言失敗原因:E assert 3 == 4

 

三、異常信息

  接下來再看一個案例,如果想在異常的時候,輸出一些提示信息,這樣報錯后就知道什么原因了

def f():
    return 3

def test_function():
    a=f()
    assert a%2==0,"判斷a為偶數,當前a的值為:%s"%a

運行結果:

  這樣當斷言失敗的時候,會給出自己寫的失敗原因了

  E AssertionError: 判斷a為偶數,當前a的值為:3

 

四、異常斷言

  為了寫關於引發異常的斷言,可以使用pytest.raises作為上下文管理器,如下

import pytest

def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1/0

運行結果:

 

 

  如果我們要斷言它拋的異常是不是預期的,比如執行:1/0,預期結果是拋異常:ZeroDivisionError:dision by zero,那我們要斷言這個異常,通常是斷言異常的type和value值了。

  這里1/0的異常類型是ZeroDivisionError,異常的value值是division by zero,於是用例可以這樣設計。

import pytest
def test_zero_division():
    """斷言異常"""
    with pytest.raises(ZeroDivisionError) as excinfo:
        1/0
        
    # 斷言異常類型type
    assert excinfo.type == ZeroDivisionError
    # 斷言異常value值
    assert "division by zero" in str(excinfo.value)

  excinfo是一個異常信息實例,它是圍繞實際引發的異常的包裝器。主要屬性是.type、.value和.traceback

 

五、常用斷言

  pytest里面斷言實際上就是python里面的assert斷言方法,常用的有以下幾種

  1.assert xx判斷xx為真

  2.assert not xx判斷xx不為真

  3.assert a in b 判斷b包含a

  4.assert a == b 判斷a等於b

  5.assert a != b 判斷a不等於b

import pytest

def is_true(a):
    if a>0:
        return True
    else:
        return False

def test_01():
    """斷言xx為真"""
    a = 5
    b = -1
    assert is_true(a)
    assert not is_true(b) # 一個用例可以支持多個斷言

def test_02():
    """斷言b包含a"""
    a = "hello"
    b = "hello world"
    assert a in b

def test_03():
    """斷言相等"""
    a = "bibi"
    b = "bibi"
    assert a == b

def test_04():
    """斷言不等於"""
    a = 5
    b = 6
    assert a != b

if __name__ == "__main__":
    pytest.main(["-s","test_assert4.py"])

 

參考文章:https://www.jianshu.com/p/983412a7c2ae

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM