Хук pytest_report_teststatus, выполняющийся после закрытия сеансов - PullRequest
0 голосов
/ 08 апреля 2020

Похоже, что часть разрыва / триггер функции-хука pytest_report_teststatus выполняется после всех фиксированных объектов сеанса, которые имеют операторы yield. Как я могу это изменить? Например, вот моя функция перехвата:

def pytest_report_teststatus(report,): 
    """
    Using the pytest hook pytest_report_teststatus.  This will give us
    the test result of each test function.
    Note, this hook can get called up to 3 times for one test funtion.
    Test Setup, Call, and Teardown.  Call is the actual test function.

    This hook function will write out test results for each
    test to the summary.log file.

    """
    sum_log = dnet_generic.get_logger()
    if report.when == 'setup' and report.outcome == 'failed':
        sum_log.info("\n    --------------------------------------")
        sum_log.info("    ---- Test Setup Stage FAILED!")
        sum_log.info(f'    ---- Test: {report.nodeid}' )
        sum_log.info("    --------------------------------------\n")
    elif report.when == 'call':
        now = datetime.datetime.now()
        end_time = now.strftime('%a %b %d %H:%M:%S %Z %Y')
        sum_log.info("\n    --------------------------------------")
        sum_log.info('    ---- Test Function completed at: %s' % (end_time) )
        sum_log.info(f'    ---- Test: {report.nodeid}' )
        sum_log.info(f'    ---- Result: {report.outcome.upper()}' )
        sum_log.info("    --------------------------------------\n")
    elif report.when == 'teardown' and report.outcome == 'failed':
        sum_log.info("\n    --------------------------------------")
        sum_log.info("    ---- Test Teardown Stage FAILED!")
        sum_log.info(f'    ---- Test: {report.nodeid}' )
        sum_log.info("    --------------------------------------\n")

, а вот осветитель сессионной области с оператором yield:

@pytest.fixture(scope="session")
def logger(testinfo):

    sum_log = dnet_generic.get_logger(initialize=True)

    ############################################################
    # Don't like to do this but I'm going to add a new key
    # to testinfo which defines the summary.log logger
    # Since dictionaries are mutable this should work fine....
    ############################################################
    testinfo.update({"sum_log" : sum_log })

    start_time = testinfo['start_time'].strftime('%a %b %d %H:%M:%S %Z %Y')
    script_name = sys.argv[0]
    script_args = sys.argv[1:] # all remaining arguments other than script name
    script_basename = os.path.basename(script_name)

    sum_log.info("\n\n----------------------------------------------------------")
    sum_log.info("----------------------------------------------------------")
    sum_log.info('-----Pytest Session Started' )
    sum_log.info('-----Start Time:: %s' % (start_time) )
    sum_log.info('-----Results for script_name %s' % (script_basename))
    sum_log.info('-----Script Arguments %s' % ' '.join(map(str,script_args)))
    sum_log.info("----------------------------------------------------------")
    sum_log.info("----------------------------------------------------------")

    yield sum_log

    now = datetime.datetime.now()
    end_time = now.strftime('%a %b %d %H:%M:%S %Z %Y')
    script_basename = os.path.basename(script_name)

    sum_log.info("+++++++++++++++++++++++++++++++++++++++++++++")
    sum_log.info("+++++++++++++++++++++++++++++++++++++++++++++")
    sum_log.info('-----Pytest Session Ended' )
    sum_log.info('-----End Time: %s' % (end_time) )
    sum_log.info("+++++++++++++++++++++++++++++++++++++++++++++")
    sum_log.info("+++++++++++++++++++++++++++++++++++++++++++++")

У меня проблема только с разбором. Если у меня есть 5 отдельных тестовых функций в модуле, этот хук вызывается 5 раз и записывает соответствующее сообщение в файл журнала, а затем устройство фиксации области действия сеанса записывает в файл журнала последний раз.

Вот что выводится файла журнала выглядело так, как если после оператора yield произошел сбой другого устройства с «областью действия» (мне нужно, чтобы сообщение обрывалось до сообщения «Завершение сеанса Pytest»:

+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++
-----Pytest Session Ended
-----End Time: Wed Apr 08 02:48:31  2020
+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++

    --------------------------------------
    ---- Test Teardown Stage FAILED!
    ---- Test: lag/test_preconfig_setup.py::test_lag_load_balance[au22-bundle-28130-4-80-128-True-60-lag_setup_test.yml]
    --------------------------------------

Спасибо, как побольше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...