zoukankan      html  css  js  c++  java
  • RobotFramework二次开发之--输出Message Log

    起因

    因为自己用的是RED这个编辑器,发现每次跑完case之后,编辑器中Message Log一栏展示的log很赞,所以就想保存下来。
    (不了解RED的,可以戳官网http://nokia.github.io/RED/help/了解,可以理解成RIDE的升级版,官方已经抛弃了RIDE的更新,使用了全新的RED作为替代)
    而我平常运行自动化测试case呢,是通过命令行的形式运行,并集成到Jenkins中,自动运行,不走RED,所以也不会看到这一栏啦。
    于是就开始探索这部分log的来源。搜索了无数资料,发现一个有用的:
    https://blog.csdn.net/wyb199026/article/details/78730097
    只是作者用的是RIDE,虽然原理上差不多,但是作为没有仔细研究过RF源码的我来说,还是花了点功夫的。
    那么结合查找资料和自己的经验心得,我对log的理解如下:

    1. 运行时Console展示的日志。如果通过命令行运行,你可以在窗口看到这些日志。如果通过Jenkins启动任务,你可以在[Console Output]中看到这部分日志。如果和我一样用RED编辑器,你会在Console窗口看到这部分日志
    2. 执行后得到的log.html文件,这个会自动输出文件的。
    3. RED编辑器的Message Log窗口展示的日志。如图所示。
      messageLog.jpg

    查找log来源

    接下来看看这部分log是从哪儿得到的,查看Console窗口可以发现,RED也是通过命令行的方式来调用case的,以下是RED执行case时的命令:
    Command: /usr/local/Cellar/python/3.6.4_3/bin/python -m robot.run --listener /var/folders/5y/4z20xf291sbf7l782tdtfnzc0000gn/T/RobotTempDir5265117293107482497/TestRunnerAgent.py:52030 --argumentfile /var/folders/5y/4z20xf291sbf7l782tdtfnzc0000gn/T/RobotTempDir5265117293107482497/args_9cf946db.arg /Users/yunduanapi_test
    发现这里用了一个--listener参数,后面还带了一个TestRunnerAgent.py文件和相应的端口号。
    使用netstat -an | grep 52030发现,当运行case的时候,这个端口是打开的
    tcp4 0 0 127.0.0.1.52030 127.0.0.1.52035 ESTABLISHED
    tcp4 0 0 127.0.0.1.52035 127.0.0.1.52030 ESTABLISHED
    tcp4 0 0 127.0.0.1.52030 . LISTEN
    说明存在socket通讯。
    再去查看TestRunnerAgent.py文件,注释就写的很清楚了:

    A Robot Framework listener that sends information to a socket
    

    重写监听类

    于是接下来参考前面提到的博文,以及官网对listener参数的说明:
    http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#listener-interface
    新建RobotListener.py,重写监听类:

       class RobotListener(object):
           ROBOT_LISTENER_API_VERSION = 2
    
        def start_suite(self, name, args):
            print "Starting Suite : " + name + "  " + args['source']
    
        def start_test(self, name, args):
            print "Starting test : " + name
            if args['template']:
                print 'Template is : ' + args['template']
    
        def end_test(self, name, args):
            print "Ending test:  " + args['longname']
            print "Test Result is : " + args['status']
            print "Test Time is: " + str(args['elapsedtime'])
    
        def log_message(self, message):
            print message['timestamp'] + " :   " + message['level'] + " : " + message['message']
    

    OK,然后自己在命令行调用的时候,参数中带上这个类就可以啦!

    使用自己的监听类,运行case

    如:{WORKSPACE}是项目所在目录,刚才的监听类保存在{WORKSPACE}/RobotListener.py,要运行的case保存在{WORKSPACE}TestCase下
    就像这样,进入项目所在目录,根据你自己的项目路径,对下面的命令稍作修改,即可执行:

    cd {WORKSPACE}
    /usr/local/Cellar/python/3.6.4_3/bin/python -m robot.run  
    --listener RobotListener.py  
    --pythonpath {YOUR_PYTHON_PATH}   
    {WORKSPACE}TestCase
    

    结果如下图所示:
    test_log.jpg

    可以看到,这样在Console窗口就出现了我们想要的log了,和命令行日志一起展现出来。
    下面还可以保存到文件,进行二次处理等,就不是什么难事了。

  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/cynthiaw/p/9392015.html
Copyright © 2011-2022 走看看