如何在运行单元测试时禁止App Engine记录?

时间:2010-12-07 03:41:03

标签: google-app-engine nosetests suppress suppressmessage

我在我的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 个答案:

答案 0 :(得分: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 :(得分:2)

这是一种愚蠢的方式,

在你的鼻子/插件/

中找到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]

它应该有用。

答案 2 :(得分:0)

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

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

这使您可以在文件顶部看到干净的错误打印输出,并在其下方显示最小化的App Engine记录输出。