代码:
# coding=utf-8
import pytest
def whatever():
return 9/0
def test_whatever():
try:
whatever()
except ZeroDivisionError as exc:
pytest.fail(exc, pytrace=True)
输出:
================================ test session starts =================================
platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2
plugins: django, cov
collected 1 items
pytest_test.py F
====================================== FAILURES ======================================
___________________________________ test_whatever ____________________________________
def test_whatever():
try:
whatever()
except ZeroDivisionError as exc:
> pytest.fail(exc, pytrace=True)
E Failed: integer division or modulo by zero
pytest_test.py:12: Failed
============================== 1 failed in 1.16 seconds ==============================
如何使pytest打印回溯,所以我将看到在任何函数异常被引发的地方?
我只是写了一个钩子,每个测试都会得到
诱惑:
@pytest。hookimpl (tryfirst = True, hookwrapper = True)
def pytest_runtest_makereport(item: item, call: CallInfo):
outcome = yield # The result after the test is completed
result = outcome.get_result()
if result.when == "call":
if result.failed == True:
else:
我有一个函数,更新一个文档与测试结果,并通过使用:result.longrepr.reprcrash.message添加跟踪
我不知道这是否是最好的方法,但它确实回答了如何仅使用pytest打印回溯的问题
@显然我有一些其他的代码
在pytest中有两种方法来处理这类情况:
使用pytest。提出了功能
使用pytest.mark.xfail装饰器
如文档所述:
使用pytest。当您在测试自己的代码故意引发的异常时,而使用@pytest.mark时,则可能会更好。带有检查函数的Xfail可能更适合于记录未修复的错误(其中测试描述了“应该”发生什么)或依赖关系中的错误。
pytest.raise的用法:
def whatever():
return 9/0
def test_whatever():
with pytest.raises(ZeroDivisionError):
whatever()
使用pytest.mark.xfail:
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_whatever():
whatever()
pytest.raise的输出:
============================= test session starts ============================
platform linux2 -- Python 2.7.10, pytest-3.2.3, py-1.4.34, pluggy-0.4.0 --
/usr/local/python_2.7_10/bin/python
cachedir: .cache
rootdir: /home/user, inifile:
collected 1 item
test_fun.py::test_whatever PASSED
======================== 1 passed in 0.01 seconds =============================
pytest的输出。xfail标记:
============================= test session starts ============================
platform linux2 -- Python 2.7.10, pytest-3.2.3, py-1.4.34, pluggy-0.4.0 --
/usr/local/python_2.7_10/bin/python
cachedir: .cache
rootdir: /home/user, inifile:
collected 1 item
test_fun.py::test_whatever xfail
======================== 1 xfailed in 0.03 seconds=============================