RF二次开发,listerner监听器获取实施日志的坑 Listener does not have mandatory 'ROBOT_LISTENER_API_VERSION' attribute

参考了https://blog.csdn.net/wyb199026/article/details/78730097,写了个这样的listener

# listen.py
class RobotListener:
    ROBOT_LISTENER_API_VERSION = 2

    def myprint(self, data):
        if type(data)==unicode:
            print data.encode("utf-8")
        else:
            print data

    # def __init__(self):
    #     import easygui
    #     easygui.msgbox("hi")

    def start_suite(self, name, args):
        self.myprint("Starting Suite : " + name + "  " + args['source'])

    def start_test(self, name, args):
        self.myprint("Starting test: " + name)
        if args['template']:
            self.myprint('Template is: ' + args['template'])

    def end_test(self, name, args):
        self.myprint("Ending test:  " + args['longname'])
        self.myprint("Test Result is : " + args['status'])
        self.myprint("Test Time is: " + str(args['elapsedtime']))

    def log_message(self, message):
        self.myprint(message['timestamp'] + "\t" + message['level'] + "\t" + message['message'])

却遇到了如下错误

[ ERROR ] Taking listener 'E:\gits\cross\autotest\listen.py' into use failed: Listener 'E:\gits\cross\autotest\listen.py' does not have mandatory 'ROBOT_LISTENER_API_VERSION' attribute.

调试起来非常恶心,先看到官网上用的是PythonListener,就改为PythonListener,依然报错

然后我学官网http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#listener-version-3,把ROBOT_LISTENER_API_VERSION = 2放在class外面,不报错了,但是没有日志输出
以为是我延迟了读取管道的缘故(延迟至进程结束),就把日志输出重定向到文件,并实时读取文件,结果发现文件没有创建
再次做调试,在监听类的__init__里写了这样的代码(就是注释掉的那些,easygui模块需要pip安装)
import easygui
easygui.msgbox(“hi”)
发现窗体并没弹出,自此严重怀疑监听类根本没被初始化

后来折腾中突然想起,RF里面自己开发测试库,要求测试库的类的名字和文件名一样.
而我的文件名取的是listener.py,就把类名从RobotListener改成了listener
然后msgbox就弹出来了,于是问题解决

网上无此资料,特此记录,希望以后遇到这个问题的同学能得到解决

发布了25 篇原创文章 · 获赞 22 · 访问量 9338

猜你喜欢

转载自blog.csdn.net/qq_27884799/article/details/89470383