我在我的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
错误消息?
答案 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记录输出。