Модуль регистрации в Python: как сохранить журнал в файл, если (и только если) проверка утверждения не пройдена? - PullRequest
1 голос
/ 11 апреля 2019

Я ищу элегантное и Pythonic решение, чтобы тесты сохраняли журнал в файл, хотя только в случае сбоя теста.Я хотел бы быть проще и придерживаться встроенного в Python модуля logging* 1007. *.

Мое текущее решение - использовать функцию-обертку для подтверждения каждого теста:

import unittest

class superTestCase(unittest.TestCase): 
    ...

    def assertWithLogging(self, assertion, assertion_arguments, expected_response, actual_response, *args):
        try:
            assertion(*assertion_arguments)
        except AssertionError as ae:
            test_name = inspect.stack()[1][3]
            current_date_time = datetime.datetime.now().strftime("%Y.%m.%d %H-%M-%S")
            logging.basicConfig(filename='tests/{}-{}-Failure.log'.format(current_date_time, test_name),
                                filemode='a',
                                format='%(message)s',
                                level=logging.DEBUG
                                )
            logger = logging.getLogger('FailureLogger')
            logger.debug('{} has failed'.format(test_name))
            logger.debug('Expected response(s):')
            logger.debug(expected_response)
            logger.debug('Actual response:')
            logger.debug(actual_response)
            for arg in args:
                logger.debug('Additionl logging info:')
                logger.debug(arg)
            raise ae

    def testSomething(self):
        ...

        self.assertWithLogging(self.assertEqual,
                               [expected_response, actual_response]
                               expected_response,
                               actual_response,
                               some_other_variable
                               )

Хотя это работает так, как я ожидаю, это решение кажется мне неуклюжим и не слишком Pythonic .

  1. Что было бы ( IsЕсть ) более элегантный способ достижения того же результата?
  2. Каковы недостатки нынешнего подхода?

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете использовать различные механизмы ведения журналов, где вы можете установить тип журналов, которые вы хотите достичь.

Приведенное ниже будет регистрировать только сообщения об ошибках.

Logger.error(msg, *args, **kwargs)

В этом журнале регистрируется msg с level logging.ERROR. Аргументы интерпретируются как для debug().

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