pytest --showlocals # show local variables in tracebacks--full-trace 引數會列印更多的錯誤輸出資訊,比引數 --tb=long 還多,即使是 ctrl+c 觸發的錯誤,也會列印出來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
pytest --pdb # 每次遇到失敗都跳轉到 pdbpdb 是 python 標準庫的除錯模組。在 pytest 中,可以直接使用 --pdb 引數在測試失敗時開啟除錯;pytest -x --pdb # 第一次遇到失敗就跳轉到 pdb,結束測試執行
pytest --pdb --maxfail=3 # 只有前三次失敗跳轉到 pdb
直接使用 --pdb 引數:
import pytest斷言失敗,進入 pdb: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 進行互動:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering pdb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>更多的pdb使用方法可參考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)
在用例指令碼中加入如下python**,pytest會自動關閉執行輸出的抓取,這裡,其他test指令碼不會受到影響,帶斷點的test上乙個test正常輸出
這種格式的結果檔案可以被jenkins或其他ci工具解析
pytest --junitxml=path例如,關閉 doctest 外掛程式
pytest -p no:doctest
pytest.main() # 基本用法例如你從gitlab倉庫裡clone了專案組的刀刀同學編寫的測試指令碼到你自己的電腦裡,你想修改些東西,並除錯,咋辦?可以通過下面的操作快速建立 virtualenvpytest.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()])
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...