RIDE屏蔽INFO级别的日志输出
最近参与自动化测试项目,项目测试内容包括软硬件,内容较复杂,每执行一个测试用例就输出了数万条INFO类型日志,严重影响测试人员查看日志、也影响了用例执行速度,因此需要减少不必要的日志输出。粗略看了一下,修改了一下RIDE的源码基本可以选择性输出日志级别,提高效率。
1、用例
笔者此处编写了一个简单的用例,包括变量赋值,log输出,也包括错误日志,如下图所示:

2、更改日志输出级别
正常情况下输出如下:
如图,Log函数的输出一般是测试人员便于调试而输出的,其类型为INFO,而第二行却为默认输出的,在一个大型测试项目中,会包括大量变量和关键字调用,若不必要的INFO输出过多就会影响执行和查找效率,因此可以根据需要将其给屏蔽掉。笔者根据第一行 command: pybot.bat --argumentfile c:\users\xg\appdata\local\temp\RIDEl3aebz.d\argfile.txt --listener E:\Software\Python\python2.7.13\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py 发现日志输出相关的文件包括TestRunnerAgent.py和对应的库testrunner,因此在其下面看了下相关源码,发现 python2.7.13\Lib\site-packages\robotide\contrib\testrunner\testrunner.py中有一个get_message_log_level函数,该函数获取并设置了一个最小的log_level,默认level即为INFO,根据其import发现在python2.7.13\Lib\site-packages\robotide\lib\robot\output\loghelper.py中定义了LEVELS的种类,LEVELS = {
'NONE' : 6,
'FAIL' : 5,
'ERROR' : 4,
'WARN' : 3,
'INFO' : 2,
'DEBUG' : 1,
'TRACE' : 0,
} ,因此猜想将get_message_log_level中min_log_level_number 设置为WARN即可屏蔽掉INFO输出,经过测试发现果然可以屏蔽掉INFO输出,屏蔽后之输出了FAIL类型的log,如下图所示:
def get_message_log_level(command):
min_log_level_number = LOG_LEVELS['INFO'] #INFO WARN
if '-L' in command:
switch = '-L'
elif '--loglevel' in command:
switch = '--loglevel'
else:
return min_log_level_number
i = command.index(switch)
if len(command) == i:
return
level = command[i+1].upper().split(':')[0]
return LOG_LEVELS.get(level, min_log_level_number)
但是,此时我们的log也失效了,这是因为log默认为INFO级别,我们需要在log中设置其级别为WARN即可正常输出log了,其更改和对应输出如下图所示:
即:我们可以根据需要设置最小的log级别,一旦设置后log 函数的级别必须不低于该级别,否则log函数将无法输出。
如果需要定制自己的log输出,可以更改TestRunnerAgent.py文件,也可以自定义日志输出类。
参考文献:
RF官方文档 4.3 Listener interface:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#listener-interface