如何在pytest中捕获异常后打印消息

时间:2018-05-31 13:30:37

标签: python python-3.x pytest

假设此示例代码:

def test_foo():
    dict = load_dict()
    try:
        value = dict[foo][bar]
    except KeyError:
        print('missing foo or bar')

如果由于KeyErrorfoo不存在而引发bar,则测试不会因为捕获到异常而失败。如果我添加raise SystemExit(1),它将失败,打印消息并显示所有追溯。

我的问题是,如何告诉pytest如果发生KeyError则表示测试失败,这样我就不需要提出SystemExit

2 个答案:

答案 0 :(得分:2)

有一个功能pytest.fail显式未通过测试:

import pytest

def test_foo():
    d1 = {'foo': 'bar'}
    try:
        value = d1['baz']
    except KeyError as err:
        pytest.fail('this was unexpected: {}'.format(err))

然而,惯用的方法是使用pytest.raises上下文管理器验证引发的异常,使用一些方便的实用程序捕获它以进行分析:

import pytest

def test_foo():
    d1 = {'foo': 'bar'}
    with pytest.raises(KeyError) as excinfo:
        value = d1['baz']
    assert excinfo.type == KeyError
    assert excinfo.match('baz')

查看文档以获取更多示例。如果您熟悉unittest,则pytest.raisesunittest.TestCase.assertRaises的吊坠,而pytest.failunittest.TestCase.fail的吊坠。

答案 1 :(得分:1)

您可以使用def test_connection_fails(self,): with pytest.raises(KeyError) as excinfo: buckets = list_all_buckets() 构造函数:

sys.exit

然后,您可以在不使用$photo = $data[$x]['gallery'][0]['big']; if ($photo === null) { $photo = 'img/noPhoto.png'; }

的情况下引发错误