Pytest 斷言重寫

2022-10-11 08:24:09 字數 1489 閱讀 2147

pytest是使用普通的斷言語句以及斷言失敗時表示式的詳細內省,僅重寫測試模組本身以及作為外掛程式一部分的任何模組,任何其他匯入的模組都不會被重寫,並且會發生正常的斷言行為。

換言之:如果你在其他模組中有斷言,你需要啟用斷言重寫,你需要pytest在匯入之前明確要求重寫這個模組。

註冊乙個或多個要在匯入時重寫的模組名稱,此函式將確保此模組或程式包內的所有模組將重寫其assert語句。

example.py裡面含有assert斷言

1

deffunc():

2 b = 1

3assert b == 0

pytest專案 test_func.py 中要匯入 example.py 模組中的函式

1

from example import

func23

deftest_func():

4 func()

此時執行python -m pytest -v test_func.py 

會產生如下結果,它將不會列印有關斷言失敗原因的除錯資訊(即b的值為1)

注意:如果我將 func() 函式定義放在 test_func.py 檔案中,則會得到預期的結果

看出兩者的區別了嗎?在於是否會列印有關斷言失敗原因的除錯資訊(即b的值為1)

可以使用 pytest.register_assert_rewrite 函式來為您的模組啟用此功能,從模組匯入函式之前,必須先呼叫register_assert_rewrite;可以將其放入conftest.py

1

#----conftest.py

2import

pytest3#

匯入同級目錄example.py

4 pytest.register_assert_rewrite("

example")

5#匯入其他包的模組

6 pytest.register_assert_rewrite("

foo.example

")

前面有個命令你會發現與平時的 pytest 執行命令不太一樣, python -m pytest -v test_func.py ,如果你單純使用命令pytest -v test_func.py 執行時將會引發匯入模組(找不到模組)的錯誤。

具體詳情請看參考文章

用pytest描述匯入函式中的失敗斷言語句

pytest權威教程-19外掛程式編寫

pytest執行用例時返回異常modulenotfounderror: no module named 『***『

pytest學習 斷言

import pytest 斷言 deff return 3 pytest允許您使用標準python assert來驗證python測試中的期望和值 deftest function assert f 4,never see you again 自行斷言 斷言可以指定一條訊息,assert cond...

pytest (五) pytest中的斷言

pytest 的斷言報告,也很豐富,和詳情,比如 import pytest def test set comparison set1 set 1308 set2 set 8035 assert set1 set2 執行一下 有時候,我們需要對一些異常丟擲作斷言,可以用pytest.raises 比...

pytest中的assert斷言

assert斷言 1.判斷兩個數值是否相等,相等則認為是true 2.判斷兩個值大小關係 3.判斷函式方法的返回值和某個值是否相等或者大小關係 上面3種可以統稱為數值大小比較 4.判斷部分字串是否包含在某個字串中,a in abc 在為true,不在為false 5.判斷 函式結果不為false,不...