• 如何给Airtest脚本/报告增加log记录


    1. 前言

    尽管Airtest脚本运行过程中会输出非常丰富的log信息,并且Airtest报告也会把我们脚本的的运行步骤显示出来,但有时候,我们会需要在脚本里面,插入一些自定义的log内容(比如某些关键点),并且显示在Airtest报告中。

    这里就要用到Airtest提供的 log() 接口了。

    2. log接口的用法

    我们建议大家使用最新版本的Airtest来体验这个 log() 接口,该接口支持传入字符串、非字符串和 traceback 对象:

    1)记录一条简单的log

    我们可以给 log() 接口传入1个字符串,来非常便捷接插入一条简单的log记录:

    log("插入一条log记录")
    

    运行后,我们不仅可以在log查看窗的log日志中看到我们插入的log记录:

    [16:02:07][INFO]<airtest.core.api> 插入一条log记录
    

    还可以在生成的Airtest报告中查看到这条log记录:

    2)记录一条报错log

    如果我们给log接口传入的是 traceback 对象,将会自动在报告中标记为报错步骤:

    try:
        1/0
    except Exception as e:
        log(e)
    

    运行后,我们可以在log日志中看到1条报错的log:

    [16:13:55][ERROR]<airtest.core.api> Traceback (most recent call last):
      File "D:\demo\test02.air\test02.py", line 10, in <module>
        1/0
    ZeroDivisionError: division by zero
    

    Airtest报告也会显示这个 traceback 的log,并且标记为错误步骤:

    3)记录一条非字符串的log

    上述2种log,已经可以满足我们大部分的log需求了,但是有时候,我们可能会有一些复杂log记录需求,比如 dictlist 这些,所以Airtest的 log() 接口也有支持传入非字符串的内容:

    data = {"test": 123, "time": 123456}
    log(data,desc="记录1条复杂的log")
    

    在log日志中也会显示成一条 [info] 日志:

    [16:22:27][INFO]<airtest.core.api> {'test': 123, 'time': 123456}
    

    同时,Airtest报告也能看到这条复杂log的标题和详细内容:

    4)自定义当前log的时间戳

    另外, log 接口还支持非常丰富的参数,比如自定义时间戳 timestamp

    # 该条log的时间被定义为当前时间
    log("自定义log的时间戳", timestamp=time.time())
    
    # 该条log的时间被定义为5秒之前
    t1 = time.time()
    time.sleep(5)
    log("自定义log的时间戳", timestamp=t1)
    
    5)自定义当前log的标题

    如果是插入1条简单的字符串log,默认会取该字符串作为log的标题显示在报告步骤上;但我们也可以通过 desc 参数,来自定义一些复杂log的标题,像示例3)那样,就有自定义log的标题。

    当然,这对传入普通字符串的log也是同样适用的:

    log("123",desc="这是1条log")
    

    6)给当前log截取屏幕图像

    有一些情况下,插入一些关键的log还不足以让我们去看到更多的信息,所以我们支持在保存log的同时,截取当前的屏幕画面,去获取更多的测试信息:

    log("截图log",snapshot=True)
    

    3. 拓展-如何过滤大量的log日志

    那其实在Airtest的log日志这块,同学们除了希望自定义log之外,还有一点是希望过滤掉一些不关注的log信息,比如,大部分同学可能只关注跑测过程的报错信息,而我们的Airtest脚本跑测过程,会输出大量的log信息:

    但其实我们更关注报错信息,类似:

    这个时候可以通过下述方式,来帮助我们过滤掉一些我们不关注的信息:

    # -*- encoding=utf8 -*-
    __author__ = "user"
    import logging
    logger = logging.getLogger("airtest")
    logger.setLevel(logging.ERROR)
    from airtest.core.api import *
    auto_setup(__file__)
    

    这样只有在运行脚本的开头,会输出少量的log信息,后续都是同学们最关注的的ERROR信息了:

    4. 小结

    那今天我们介绍了增加自定义log的接口,以及如何过滤Airtest大量log里面我们不关注的部分,后续我们还会持续跟大家分享下,如何把log内容保存在文件中,感兴趣的同学可以关注我们,避免错过后续的推文内容哦!


    Airtest官网https://airtest.netease.com/
    Airtest教程官网https://airtest.doc.io.netease.com/
    搭建企业私有云服务https://airlab.163.com/b2b

    官方答疑 Q 群:117973773

    呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

  • 相关阅读:
    Spring Bean的生命周期
    使用docker安装虚拟机并打开ssh连接
    查看/设置JVM使用的垃圾收集器
    使用Apollo动态修改线上数据源
    java8之lambda表达式
    Java8之Stream
    @Bean 的用法
    Java中的Filter过滤器
    详解tomcat的连接数与线程池
    什么是ClassLoader
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/16223928.html
Copyright © 2020-2023  润新知