Другой код выхода с pytest, когда тесты вызывают необработанное исключение (кроме AssertionError) - PullRequest
0 голосов
/ 17 июня 2020

Я хотел бы знать, если набор тестов pytest завершился неудачно из-за: 1. определенного теста не удалось выполнить утверждение или 2. данный тест вызвал необработанное исключение

Итак, учитывая следующие тесты:

def test_ok():
    assert 0 == 0

def test_failed():
    assert 1 == 0

def test_different_exit_code():
    open('/nonexistent', 'r')

Я хочу провести различие (с разными кодами выхода) между случаем test_failed и test_different_exit_code.

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Вы можете использовать pytest-finer-verdicts плагин, чтобы различать сбои теста и другие сбои (например, из-за исключений).

Edit1: Например в приведенном ниже фрагменте

import pytest

def test_fail():
    assert 75 <= 70

def test_error():
    open("/nonexistent", 'r')

pytest-finer-verdicts будет различать следующие два теста, которые не пройдут по разным причинам.

collected 2 items                                                               

t.py FE                                                         [100%]

==================================== ERRORS =====================================
_________________________ ERROR at setup of test_error1 _________________________

    def test_error1():
>       open("/nonexistent", 'r')
E       FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent'

t.py:7: FileNotFoundError
=================================== FAILURES ====================================
___________________________________ test_fail ___________________________________

    def test_fail():
>       assert 75 <= 70
E       assert 75 <= 70

t.py:4: AssertionError
============================ short test summary info ============================
FAILED t.py::test_fail - assert 75 <= 70
ERROR t.py::test_error1 - FileNotFoundError: [Errno 2] No such file or directo...
========================== 1 failed, 1 error in 0.19s ===========================
0 голосов
/ 23 июня 2020

В итоге я получил https://pypi.org/project/pytest-unhandled-exception-exit-code/

Это делает возможной установку кода выхода, когда необработанное исключение происходит в любом из тестов, как в примере командной строки: pytest --unhandled-exc-exit-code 13

0 голосов
/ 18 июня 2020

pytest имеет обработанные исключения, позвольте мне показать вам один пример:

import pytest
from pytest_bdd import given

    def pytest_bdd_step_error(request, feature, scenario, step, step_func, step_func_args, exception):
    print(f'Step failed: {step}')

Это ловушка, которую вы можете использовать для обработки ошибок в ваших pytest step_defs, которые вы вызываете только в своем def test_failed (), так что вы можете написать это

def test_ok():
    assert 0 == 0 # Test is ok


def test_failed():
    #assert 1 == 0 # Test failed REMOVE THIS PART AND USE assert not
    assert not 1 == 0



def test_different_exit_code():
    open('/nonexistent', 'r')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...