В py.test
(версия 4.6.2) у вас есть разметчик для теста, чтобы пометить его как неудачный, например,
@pytest.mark.xfail
def test1():
return 1/0
Также можно проверить само исключение
@pytest.mark.xfail(raises=ZeroDivisionError)
но можно ли каким-то образом проверить само сообщение об ошибке?
это полезно, когда у вас есть HTTPError
, так как может быть много причин.А когда вы сравниваете само сообщение об ошибке, вы можете гораздо более точно определить, когда тест не пройден (например, отличить определенный Client Error
от Server Error
).
Пока что я использую следующую конструкцию:
def test_fail_request(self):
with pytest.raises(requests.exceptions.HTTPError) as excinfo:
response = requests.something
assert '403 Client Error: Not Found' in str(excinfo.value)
, но, конечно, тест, подобный следующему, будет более читабельным, компактным и правильно обработанным py.test
:
@pytest.mark.xfail(expected_error = "403 Client Error: Not Found"):
def test_fail_request(self):
response = requests.something
Есть ли способ реализовать это поведение / функцию?
Для пояснения ожидается, что последний пример кода завершится неудачно, но только когда сообщение об ошибке содержит определенное сообщение (пример: 400 Client Error: Bad Request
).В этом случае об испытании будет сообщено как XFAIL
.
Но если тест не пройден и создается сообщение об ошибке другое (даже для того же исключения, но вместо этого, например, 500 Server Error
в сообщении об ошибке), тест должен быть указан как «неожиданно»мимоходом »(XPASS
).