斷言是寫自動化測試基本最重要的一步,乙個用例沒有斷言,就失去了自動化測試的意義了。什麼是斷言呢?
簡單來講就是實際結果和期望結果去對比,符合預期那就測試pass,不符合預期那就測試 failed
pytest允許您使用標準python斷言來驗證python測試中的期望和值。例如,你可以寫下
content of test_assert1.pydeff():
return 3
deftest_function():
assert f() == 4
斷言f()函式的返回值,接下來會看到斷言失敗,因為返回的值是3,判斷等於4,所以失敗了
$ pytest test_assert1.py*************************== test session starts *************************===platform linux -- python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $regendoc_tmpdir, inifile:
collected 1item
test_assert1.py f [100%]
******************************=== failures ******************************===
______________________________ test_function _______________________________
deftest_function():
> assert f() == 4e
assert 3 == 4e + where 3 =f()
test_assert1.py:5: assertionerror
************************* 1 failed in 0.12 seconds *************************
從報錯資訊可以看到斷言失敗原因:e assert 3 == 4
接下來再看乙個案例,如果想在異常的時候,輸出一些提示資訊,這樣報錯後,就方便檢視是什麼原因了
deff():
return 3
deftest_function():
a =f()
assert a % 2 == 0, "
判斷a為偶數,當前a的值為:%s
"%a
執行結果
******************************==== failures ***********************************________________________________ test_function ________________________________
deftest_function():
a =f()
> assert a % 2 == 0, "
判斷a為偶數,當前a的值為:%s
"%ae assertionerror: 判斷a為偶數,當前a的值為:3e
assert (3 % 2) ==0
test_03.py:9: assertionerror
*************************= 1 failed in 0.18 seconds *************************==
這樣當斷言失敗的時候,會給出自己寫的失敗原因了e assertionerror: 判斷a為偶數,當前a的值為:3
為了寫關於引發異常的斷言,可以使用pytest.raises作為上下文管理器,如下
#content of test_assert1.py
import
pytest
deftest_zero_division():
with pytest.raises(zerodivisionerror):
1 / 0
執行結果
*************************==== test session starts *************************====platform win32 -- python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0rootdir: d:\yoyo\canshuhua, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 1item
test_assert1.py.
*************************= 1 passed in 0.31 seconds *************************==
如果我們要斷言它拋的異常是不是預期的,比如執行:1/0,預期結果是拋異常:zerodivisionerror: division by zero,那我們要斷言這個異常,通常是斷言異常的type和value值了。
這裡1/0的異常型別是zerodivisionerror,異常的value值是division by zero,於是用例可以這樣設計
#content of test_assert1.py
#import
pytest
deftest_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
注意:斷言type的時候,異常型別是不需要加引號的,斷言value值的時候需轉str
在上下文管理器窗體中,可以使用關鍵字引數訊息指定自定義失敗訊息:
with pytest.raises(zerodivisionerror, message="expecting zerodivisionerror"):
pass
結果:failed: expecting zerodivisionerror
pytest裡面斷言實際上就是python裡面的assert斷言方法,常用的有以下幾種
pytest文件9 引數化parametrize
pytest.mark.parametrize裝飾器可以實現測試用例引數化。1.這裡是乙個實現檢查一定的輸入和期望輸出測試功能的典型例子 content of test expectation.py coding utf 8 import pytest pytest.mark.parametrize...
pytest文件9 引數化parametrize
pytest.mark.parametrize裝飾器可以實現測試用例引數化。1.這裡是乙個實現檢查一定的輸入和期望輸出測試功能的典型例子 content of test expectation.py coding utf 8 import pytest pytest.mark.parametrize...
pytest文件2 用例執行
1.檔名以test py檔案和 test.py 2.以test 開頭的函式 3.以test 開頭的類 4.以test 開頭的方法 5.所有的包pakege必須要有 init py檔案 1.執行目錄下所有的用例 pytest 檔名 2.執行乙個py檔案下用例 pytest 指令碼名稱.py 3.x 遇...