Python測試框架之pytest高階用法(六)

2022-07-13 16:12:10 字數 4739 閱讀 1373

pytest --showlocals     # show local variables in tracebacks

pytest -l # show local variables (shortcut)

pytest --tb=auto # (default) 'long' tracebacks for the first and last

# entry, but 'short' style for the other entries

pytest --tb=long # exhaustive, informative traceback formatting

pytest --tb=short # shorter traceback format

pytest --tb=line # only one line per failure

pytest --tb=native # python standard library formatting

pytest --tb=no # no traceback at all

--full-trace 引數會列印更多的錯誤輸出資訊,比引數 --tb=long 還多,即使是 ctrl+c 觸發的錯誤,也會列印出來

pytest --pdb              # 每次遇到失敗都跳轉到 pdb

pytest -x --pdb # 第一次遇到失敗就跳轉到 pdb,結束測試執行

pytest --pdb --maxfail=3 # 只有前三次失敗跳轉到 pdb

pdb 是 python 標準庫的除錯模組。在 pytest 中,可以直接使用 --pdb 引數在測試失敗時開啟除錯;

直接使用 --pdb 引數:

import pytest

def division(a, b):

return int(a / b)

@pytest.mark.parametrize('a, b, c', [(4, 2, 2), (0, 2, 0), (1, 0, 0), (6, 8, 0)])

def test_1(a, b, c):

res = division(a, b)

assert res == c

@pytest.mark.parametrize('a', [100,75])

@pytest.mark.parametrize('b, c', [(4,25),(3,25)])

def test_1(a, b, c):

res = division(a, b)

assert res == c

if __name__ == '__main__':

pytest.main(["-q","--pdb"])

斷言失敗,進入 pdb:

pdb 提示符出現後,便可以使用 pdb 的互動除錯功能,檢視錯誤時,有以下常用命令:

在控制台與 pdb 進行互動:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering pdb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pdb post_mortem >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

> e:\pycharmprojects\lianxi\test_abc.py(286)test_1()

-> assert res == c

(pdb) p

*** syntaxerror: unexpected eof while parsing

(pdb) p a

75(pdb) pp a

75(pdb) l

281 assert res == c

282 @pytest.mark.parametrize('a', [100,75])

283 @pytest.mark.parametrize('b, c', [(4,25),(3,25)])

284 def test_1(a, b, c):

285 res = division(a, b)

286 -> assert res == c

287 if __name__ == '__main__':

288 pytest.main(["-q","--pdb"])

289

290 # import pytest

291 # @pytest.fixture(scope='function')

(pdb) l 275,285

275 import pytest

276 def division(a, b):

277 return int(a / b)

278 @pytest.mark.parametrize('a, b, c', [(4, 2, 2), (0, 2, 0), (1, 0, 0), (6, 8, 0)])

279 def test_1(a, b, c):

280 res = division(a, b)

281 assert res == c

282 @pytest.mark.parametrize('a', [100,75])

283 @pytest.mark.parametrize('b, c', [(4,25),(3,25)])

284 def test_1(a, b, c):

285 res = division(a, b)

(pdb) a

a = 75

b = 4

c = 25

(pdb) u

> d:\myprogram\miniconda3\lib\site-packages\_pytest\python.py(180)pytest_pyfunc_call()

-> result = testfunction(**testargs)

(pdb) u

> d:\myprogram\miniconda3\lib\site-packages\pluggy\callers.py(187)_multicall()

-> res = hook_impl.function(*args)

(pdb) d

> d:\myprogram\miniconda3\lib\site-packages\_pytest\python.py(180)pytest_pyfunc_call()

-> result = testfunction(**testargs)

(pdb) q

------ generated html file: file://e:\pycharmprojects\lianxi\report.html ------

*************************== short test summary info *************************==

failed test_abc.py::test_1[4-25-75] - assert 18 == 25

!!!!!!!!!!!!!!!!!! _pytest.outcomes.exit: quitting debugger !!!!!!!!!!!!!!!!!!!

1 failed, 1 passed in 112.57s (0:01:52)

更多的pdb使用方法可參考pdb詳細的使用方法:

在用例指令碼中加入如下python**,pytest會自動關閉執行輸出的抓取,這裡,其他test指令碼不會受到影響,帶斷點的test上乙個test正常輸出

這種格式的結果檔案可以被jenkins或其他ci工具解析

pytest --junitxml=path
例如,關閉 doctest 外掛程式

pytest -p no:doctest

pytest.main()                      # 基本用法

pytest.main(['-x', 'mytestdir']) # 傳入配置引數

// 指定自定義的或額外的外掛程式

# content of myinvoke.py

import pytest

class myplugin(object):

def pytest_sessionfinish(self):

print("*** test run reporting finishing")

pytest.main(["-qq"], plugins=[myplugin()])

例如你從gitlab倉庫裡clone了專案組的刀刀同學編寫的測試指令碼到你自己的電腦裡,你想修改些東西,並除錯,咋辦?可以通過下面的操作快速建立 virtualenv

cd pip install -e .

python測試框架

unittest是python內建的標準類庫 unittest 和 junit類似,可以說是python的標準單元測試框架,所以有時也被人稱為 pyunit。它使用起來和xunit 家族其他成員類似。用的人也比較多。相容 python2 以及python3 unittest2 可以說是乙個針對 un...

python功能測試 python測試框架

一 測試常用規則 乙個測試單元必須關注乙個很小的功能函式,證明它是正確的 在編寫 前執行完整的測試,而且在編寫 後再重新執行一次。這樣能保證你後來編寫的 不會破壞任何事情 在提交 前執行完整的測試 單元測試函式使用長的而且具有描述性的名字。在正式執行 中,可能使用square 或sqr 取名,但是在...

Python測試框架之pytest簡單應用

pytest框架簡介 1 python的第三方單元測試框架,比自帶unittest更簡單和高效,支援315種以上的外掛程式,同時相容unittest框架。2 unittest框架遷移到pytest框架的時候不需要重寫 3 純python 的自動化測試框架。4 可以很好的與jenkins整合。5 al...