如何在运行单元测试时抑制App Engine日志记录?

8

我在我的GAE应用程序中使用gaetestbed,它运行得非常好。然而,当您的测试不正确时,nose打印的有用语句被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个回答

3

不确定这是否适用于gaetestbed,但是使用django-nose,我可以在我的settings.py中添加以下内容:

NOSE_ARGS = ['--logging-clear-handlers', '--logging-filter=-root']

另一个解决方法是反向使用grep输出:
./manage.py test 2>&1 | egrep -v "^(root|Level)"

1
建议的nose参数可以解决问题(至少在提问4年后仍然有效:)),而且比修补nose源代码要干净得多。首先尝试这个。 - Alice

2

这里有一个愚蠢的方法,

在你的nose/plugins/下找到capture.py和logcapture.py文件

在这两个文件中找到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]

它应该能正常工作。


0

我还没有尝试过Bigbear的建议,但我找到了一个快速解决问题的方法:将错误输出导入到一个文件中。

python run_nosetests.py 2> failures.tmp
gedit failures.tmp &

这样可以让你在文件顶部看到干净的错误输出,以及最小化的App Engine日志输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接