2016-08-18 4 views
1

Я запускаю тесты django-носа в команде управления с использованием call_command. Мне нужно захватить вывод и что-то сделать с ним, в зависимости от того, если он не прошел или прошел. Мой текущий код в команды управления:Django Nose - требуется захват вывода во время выполнения тестов

content = StringIO() 
try: 
    call_command('test', '--nologcapture', '-s', stdout=content) 
     # since its calling system exit 
except BaseException: 
    pass 
content.seek(0) 
print content.read(), '<-- content' 

# Check if test is passed and do something or else something else. 

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

Я пробовал много плагинов для носа, но не могу получить результат.

Спасибо.

ответ

0

Вероятная причина вашей проблемы заключается в том, что внутри кода управления они используют операторы печати, которые идут непосредственно на sys.stdout, вместо использования атрибута экземпляра команды управления.

Проверьте код внутри команды управления. Отпечатки должны выглядеть примерно так:

self.stdout.write(...) 
# or, perhaps ... 
print(..., file=self.stdout) 

Если это не так, и у вас есть контроль над кодом команды управления, а затем исправить его использовать self.stdout. Затем вы должны увидеть результат, полученный в вашем экземпляре StringIO с вашим текущим кодом.

Если у вас нет контроля над кодом в команде управления, вам придется пойти по этому другому пути, перенаправив stdout (используя диспетчер контекстов) перед вызовом команды.

Примечание: более простой способ получения вывода из экземпляра StringIO использует content.getvalue() вместо поиска и чтения.