Как подавить ведение журнала App Engine при выполнении модульных тестов?
Я использую gaetestbed в своем приложении GAE, и оно работает очень хорошо. Однако полезные утверждения, которые печатаются в носу, когда ваш тест неверен, смываются журналами App Engine:
root: Level 9: Evaling filter expression "datastore_types.Key.from_path(u'User', 85, _app=u'tipfy') == datastore_types.Key.from_path(u'User', 87, _app=u'tipfy')"
root: Level 9: Evaling filter expression "datastore_types.Key.from_path(u'User', 87, _app=u'tipfy') == datastore_types.Key.from_path(u'User', 87, _app=u'tipfy')"
root: Level 9: Evaling filter expression "datastore_types.Key.from_path(u'User', 86, _app=u'tipfy') == datastore_types.Key.from_path(u'User', 87, _app=u'tipfy')"
root: Level 9: Evaling filter expression "datastore_types.Key.from_path(u'User', 87, _app=u'tipfy') == datastore_types.Key.from_path(u'User', 87, _app=u'tipfy')"
--------------------- >> end captured logging << ---------------------
----------------------------------------------------------------------
Ran 28 tests in 3.605s
Есть ли способ подавить это, чтобы я мог получить чистую something != something else
только сообщения об ошибках?
3 ответа
Вот глупый способ,
найдите capture.py и logcapture.py у вас в носу /plugins/
найти функцию addCaptureToErr
в обоих файлах, затем пересмотрите его.
(Я не знаю, какой из них правильный, пожалуйста, проверьте себя)
Исходный код должен выглядеть так:
def addCaptureToErr(self, ev, output):
return '\n'.join([str(ev) , ln('>> begin captured stdout <<'),
output, ln('>> end captured stdout <<')])
изменить его в
def addCaptureToErr(self, ev, output):
check_errmsgs(output)
return '\n'.join([str(ev) , ln('>> begin captured stdout <<'),
output, ln('>> end captured stdout <<')])
def check_errmsgs(self,errmsgs):
for i in range(len(errmsgs)-1,-1,-1):
item = errmsgs[i].split(":")
if(item[2].find("Evaling filter expression")):
#find msgs you want to ignore
del errmsgs[i]
Это должно работать.
Не уверен, что это будет работать в gaetestbed, но используя django-nose, я могу добавить следующее в мои settings.py:
NOSE_ARGS = ['--logging-clear-handlers', '--logging-filter=-root']
Другой обходной путь - просто инвертировать grep:
./manage.py test 2>&1 | egrep -v "^(root|Level)"
Я не попробовал предложение Bigbear, но я нашел быстрый способ обойти проблему: направить вывод ошибки в файл.
python run_nosetests.py 2> failures.tmp
gedit failures.tmp &
Это позволяет вам видеть чистую распечатку ваших ошибок в верхней части файла и минимизированный вывод журналирования App Engine под ним.