Вы могли бы, но я не уверен, что это ваш лучший подход.
Для этого подхода вы бы:
Создание потока в памяти, который можетиспользоваться TextTestRunner
.Для такого типа вещей io.StringIO
будет почти идеальным, за исключением того, что он работает только с вводом Unicode, и я не уверен, что TextTestRunner правильно записывает Unicode в поток.Другим вариантом может быть кодирование вашего собственного потока в памяти, который соответствует вашим целям, возможно, упаковка StringIO
с помощью кодера.
Создайте свой собственный TextTestRunner и инициализируйте его следующим образом:-память памяти.
Создать класс, который читает из потока и записывает его в журнал.
Это может быть так просто:
class StreamLogger(object):
def __init__(self, input_stream, output_logger):
self.input_stream = input_stream
self.output_logger
def run(self):
while True:
line = input_stream.readline()
if not line:
break
output_logger.error(line)
Проблемы с этим подходом:
- У вас нет особой гибкости при направлении различных частей вывода TextTestRunner на разные уровни журнала.
- TextTestRunner, если он неправильно настроен, напишет кучу вещей, которые вы, вероятно, не хотите.Детализация по умолчанию - 1, которая будет записывать точки прогресса во время тестирования ... что, вероятно, только помешает выводу в журнале.
- Если вы сделаете это наивно, вы вызовете
stream_logger.run()
только после того, как вы записали весь свой вывод в поток.Таким образом, вы не получите свои результаты регистрации в реальном времени, и ваши временные метки будут бесполезны.Вы можете решить эту проблему, например, создав отдельный поток для чтения, но тогда вам нужно будет выбрать / свернуть поток, который может обрабатывать поток чтения и записи, работающий одновременно, или разветвить процесс и отключить поток в памяти,или что-то относительно сложное.
Подход, который я предлагаю вместо этого, состоит в том, чтобы отказаться от потоков и просто запустить собственный тестовый прогон - называемый, скажем, LoggingTestRunner - который записывает результаты теста в регистратор точнотак, как вы хотите, чтобы это вывод.Это позволит вам избежать всех трех проблем.