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

Mat*_*ris 8 google-app-engine suppress nosetests suppressmessage

我在我的GAE应用程序中使用gaetestbed,它运行得很好.但是,当您的测试不正确时,鼻子打印的有用语句将被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
Run Code Online (Sandbox Code Playgroud)

有没有办法抑制这个,所以我只能得到干净的something != something else错误消息?

KTU*_*KTU 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 <<')])
Run Code Online (Sandbox Code Playgroud)

把它改成

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]
Run Code Online (Sandbox Code Playgroud)

它应该有效。