2010-12-07 37 views
8

我在我的GAE应用程序中使用gaetestbed,它工作得很好。然而,有用的语句鼻子打印时的测试是不正确被冲走App Engine的记录:如何在运行单元测试时取消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错误信息?

回答

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] 

它应该工作。

0

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

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

这可以让你看到你的错误的清洁打印在文件的顶部,并在其下方App Engine的日志记录的最小输出。

3

不知道这会在gaetestbed工作,但使用Django鼻我可以添加以下到我的settings.py:

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

另一个解决办法是只用grep逆输出:

./manage.py test 2>&1 | egrep -v "^(root|Level)" 
+1

建议的鼻子参数可以完成这项工作(至少它在提问后的4年:)),并且比修补鼻子src代码更干净。先试试这个。 – Alice 2014-10-25 23:11:16

相关问题