Подавить весь вывод из Python / unittest - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь подавить вывод терминала ALL из юнит-теста python и хочу дать только пользовательскую обратную связь, основанную на том, прошел ли тест или не прошел.Ничто из того, что я нашел в Интернете, похоже, не работает.Мой вариант использования - предоставить обратную связь / подсказки новым студентам, изучающим 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

Ниже приведен мой файл юнит-теста 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, когда я его запускаю)

Добавление: я не смог найти ни одного дополнительного параметра unittest, чтобы подавить все выходные данные.

1 Ответ

0 голосов
/ 05 февраля 2019

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

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