RIDE屏蔽INFO级别的日志输出

 

最近参与自动化测试项目,项目测试内容包括软硬件,内容较复杂,每执行一个测试用例就输出了数万条INFO类型日志,严重影响测试人员查看日志、也影响了用例执行速度,因此需要减少不必要的日志输出。粗略看了一下,修改了一下RIDE的源码基本可以选择性输出日志级别,提高效率。

 

1、用例

笔者此处编写了一个简单的用例,包括变量赋值,log输出,也包括错误日志,如下图所示:

RIDE屏蔽INFO级别的日志输出_屏蔽RF INFO级别日志输出

 

2、更改日志输出级别

正常情况下输出如下:

RIDE屏蔽INFO级别的日志输出_屏蔽RF INFO级别日志输出_02

如图,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)

RIDE屏蔽INFO级别的日志输出_屏蔽RF INFO级别日志输出_03

但是,此时我们的log也失效了,这是因为log默认为INFO级别,我们需要在log中设置其级别为WARN即可正常输出log了,其更改和对应输出如下图所示:

RIDE屏蔽INFO级别的日志输出_robot framework_04

RIDE屏蔽INFO级别的日志输出_自动化测试_05

即:我们可以根据需要设置最小的log级别,一旦设置后log 函数的级别必须不低于该级别,否则log函数将无法输出。

如果需要定制自己的log输出,可以更改TestRunnerAgent.py文件,也可以自定义日志输出类。

参考文献:

RF官方文档 ​​4.3 Listener interface​​​:​​http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#listener-interface​

​RobotFramework二次开发之--输出Message Log​​​:​​https://www.jianshu.com/p/fe4884c0b088​

 

3、说明

测试系统为:python2.7.13, RIDE1.5.2.1