Я пытаюсь подавить ВСЕ вывод терминала из 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, когда я запускаю ее)
Приложение: Я не смог найти какие-либо необязательные параметры для подавления всего вывода.
Другой вариант (в дополнение к написанию собственного TestRunner, как это было предложено Дэниелом Приденом) - это просто обернуть вызов исполняемого файла теста из командной строки и отфильтровать его (например, с помощью grep
, awk
, perl
или другого скрипта Python
). часть вывода, которую вы хотите сделать видимой.
TestRunner
и использовать его вместоTextTestRunner
который по умолчанию используетunittest.main()
.