pytest使用詳解


pytest:幫助你寫出更好的程序:

  • 開源,免費。
  • 升級pytest,嚴格的向后兼容性。
  • 豐富的第三方插件。
  • 內置assert斷言

 

基礎用法

def test_due():
    x="why"
    assert  'w' in x

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

·assert xx  判斷xx為真

·assert not xx 判斷xx不為真

·assert a in b 判斷b包含a

·assert a == b 判斷a等於b

·assert a != b 判斷a不等於b

異常信息提示:如果想在異常的時候輸出一些提示信息,這樣報錯后就方便查看是什么原因了

def add(a,b):
    return a+b

def test_assert():
    assert 6 == add(3,4),"方法返回的值不等於6,而是等於{0}".format(add(3,4))

異常信息的斷言

我們要斷言它拋的異常是不是預期的,比如執行:1/0,預期結果是拋異常:ZeroDivisionError: division by zero,那我們要斷言這個異常。通常是斷言異常的type和value的值。這里1/0的異常類型是ZeroDivisionError,異常的value值是"integer division or modulo by zero",於是以下是代碼的設計用例

import pytest

def test_zero_division():
    with pytest.raises(ZeroDivisionError,message="Exceptions ZeroDivisionError") as exinfo:    
        1/0

    assert exinfo.type == ZeroDivisionError
    assert str(exinfo.value) == "integer division or modulo by zero","{0}".format(exinfo.value)
message:如果失敗,顯示失敗的原因
def test_zero_division():
    with pytest.raises(ZeroDivisionError,message='0不能被除')as exec:
        pass

  

fixture可以聲明function,module,fixture。也可以使用xunit的fixture的格式,setup和teardown。使用fixtures作為function的參數使用

小編最常用識貨大概就是關聯測試接口時候,比如保單的查詢,前提條件必須要生成一個新的保單再去查詢

@pytest.fixture()
def before():
    print '\nbefore each test'

def test_1(before):
    print 'test_1()'

def test_2(before):
    print 'test_2()'
    assert 0
執行結果:test_1、test_2執行前都要執行before,可以做關聯接口測試使用
test_fixture_basic.py::test_1 before each test test_1() PASSED test_fixture_basic.py::test_2 before each test test_2() FAILED

scope控制fixtrue調用的頻率,默認是function。可選的有:

  • function:每個測試函數之前執行一次
  • class:每個測試類之前執行一次
  • module:每個module之前執行一次
  • session:每次session之前執行一次,即每次測試執行一次

 

跳過某個測試 skip

如果有個API接口暫不確定,或者需要單獨測試你應當跳過這個API的測試

@pytest.mark.skip(reason="原因")

 

 

 

意料之中的失敗 xfail

可以使用xfail標記指示您希望測試失敗。一個常見的用例是當你發現在你的軟件中的錯誤,你寫一個測試記錄軟件如何應該的行為。在您修復錯誤之前,此測試當然會失敗。為避免測試失敗,請將測試標記為xfail。修復錯誤后,刪除xfail標記並進行回歸測試,確保錯誤不會再次發生

strict參數

建議設置strict=True以確保XPASS(意外通過)時,測試的記錄為失敗
如果預期失敗的代碼,意外通過了測試將很容易導致開發人員的誤解。

@pytest.mark.xfail(strict=True) 

reason參數

與skipif一樣,可以標記對故障的期待

# 標記對故障的期待,如果測試失敗且未在加注中提及,則將報告為常規故障 @pytest.mark.xfail(sys.version_info >= (3,6), reason="python3.6 api changes") def test_function(): ... 

raises參數

具體的說明測試失敗的原因。可以在raises參數中指定單個異常或異常組

@pyest.mark.xfail(raises=RuntimeError) 

如果測試失敗且沒有提到指定的異常,那么測試將被報告為常規失敗raises

 
 
相關不錯的地址:https://www.jianshu.com/p/7a7432340f02

 


免責聲明!

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



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