Подавить весь вывод из Python / unittest

1

Я пытаюсь подавить ВСЕ вывод терминала из python unittest и хочу дать только пользовательскую обратную связь, основанную на том, прошел тест или прошел тест. Ничто из того, что я нашел в Интернете, похоже, не работает. Мой прецедент - это предоставление отзывов/подсказок новым ученикам, изучающим Python.

Я вызываю unittest с моим сценарием оболочки (я пробовал несколько вариантов "dev/null"):

if python -m unittest discover -s test; then
    echo "<div class='pass'>pass</div>"
else
    echo "<div class='fail'>fail</div>"
fi >>/dev/null

Ниже мой файл unittest python:

import unittest
import sys
import os

sys.path.insert(0, '/path/to/module')
import myFile

sys.stdout = os.devnull //tried this but didn't work
sys.stderr = os.devnull //tried this but didn't work

class TestCalc(unittest.TestCase):

  def test_add(self):
    result = calc.add(10, 5)
    self.assertEqual(result, 15)

if __name__ == '__main__':
  unittest.main()

Эхо в моем сценарии оболочки действительно работает на основе проверки или провала теста, но выше это весь вывод терминала, который я не хочу. (Выход выполняется в интерактивной среде IDE, когда я запускаю ее)

Приложение: Я не смог найти какие-либо необязательные параметры для подавления всего вывода.

  • 1
    Похоже, вы хотите реализовать свой собственный TestRunner и использовать его вместо TextTestRunner который по умолчанию использует unittest.main() .
Теги:
unit-testing

1 ответ

0

Другой вариант (в дополнение к написанию собственного TestRunner, как это было предложено Дэниелом Приденом) - это просто обернуть вызов исполняемого файла теста из командной строки и отфильтровать его (например, с помощью grep, awk, perl или другого скрипта Python). часть вывода, которую вы хотите сделать видимой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню