zoukankan      html  css  js  c++  java
  • Airtest API精讲之报告日志log()

    上期回顾:Airtest API精讲之断言


    以下基于
    python3.8;airtestIDE1.2.11;airtest1.2.2;pocoui1.0.83

    log()用于将日志显示在Airtest HTML报告中,我们可以主动调用记录日志,Airtest自身也会调用log()记录执行日志。

    源码解析

    先来看看源码(不想看源码的可以直接跳到后面的演示实例):

    # 文件位置:your_python_path/site-packages/airtest/core/helper.py
    def log(arg, timestamp=None, desc="", snapshot=False):
        from airtest.core.cv import try_log_screen
        if G.LOGGER:
            depth = 0
            if snapshot:
                # 如果指定了snapshot参数,强制保存一张图片
                save_image = ST.SAVE_IMAGE
                ST.SAVE_IMAGE = True
                try:
                    try_log_screen(depth=2)
                except AttributeError:
                    # if G.DEVICE is None
                    pass
                else:
                    depth = 1
                finally:
                    ST.SAVE_IMAGE = save_image
            if isinstance(arg, Exception):
                if hasattr(arg, "__traceback__"):
                    # in PY3, arg.__traceback__ is traceback object
                    trace_msg = ''.join(traceback.format_exception(type(arg), arg, arg.__traceback__))
                else:
                    trace_msg = arg.message  # PY2
                G.LOGGER.log("info", {
                        "name": desc or arg.__class__.__name__,
                        "traceback": trace_msg,
                    }, depth=depth, timestamp=timestamp)
                G.LOGGING.error(trace_msg)
            elif isinstance(arg, six.string_types):
                # 普通文本log内容放在"log"里,如果有trace内容放在"traceback"里
                # 在报告中,假如"traceback"有内容,将会被识别为报错,这个步骤会被判定为不通过
                G.LOGGER.log("info", {"name": desc or arg, "traceback": None, "log": arg}, depth=depth, timestamp=timestamp)
                G.LOGGING.info(arg)
            else:
                G.LOGGER.log("info", {"name": desc or repr(arg), "traceback": None, "log": repr(arg)}, depth=depth,
                             timestamp=timestamp)
                G.LOGGING.info(repr(arg))

    参数:
    arg:要记录的信息,显示在报告右侧。
    timestamp:自定义该条log的时间,默认为time.time()。一般情况下我们就用默认值就好,所以可以忽略此参数。
    desc:自定义log标题,默认与arg相同,显示在报告左侧。
    snapshot:是否截屏,方便查看当时设备的情况。

    源码很简单,先判断是否截图,是的话就截一张图;
    之后判断arg是不是报错信息,是的话走记录报错的逻辑;
    之后判断是普通文本走普通信息的逻辑(也就是我们要用到的情况);否则走特殊类型逻辑。
    我们一般用到的就是普通信息的逻辑,这所以log()源码这么多种情况,是因为Airtest内部生成各种日志也会用到。

    实例演示

    # 例1:最典型的应用
    log("开始执行用例")

    # 例2:把json数据存到日志中
    # 假设已经将json转为了字典
    dic = {"q":"测试工程师小站","p":False,"g":[{"type":"sug","sa":"s_1","q":"一个测试工程师"},{"type":"sug","sa":"s_2","q":"测试开发工程师"},{"type":"sug","sa":"s_3","q":"测试技术工程师"},],"slid":"1536329420958301","queryid":"0x7c62fdc7d"}
    log(dic, desc="请求返回的数据")

    # 例3:异常时使用
    # 正常应该找到"测试工程师小站",找不到时记录日志并截图
    if poco("测试工程师小站").wait():
        poco("测试工程师小站").click()
    else:
        log("未找到测试工程师小站", snapshot=True)

    我们看下最后生成的报告:
    例1:就是普通的一个信息的记录

    例2:左侧显示描述,右侧记录了详细的数据

    例3:因为元素是乱写的,肯定不存在,所以记录信息的同时截屏

    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

  • 相关阅读:
    一些技术摘选及随想
    新技术学习方法如何学习一门新编程语言(Lua)?
    什么时候该用ASSERT?
    MFC是否过时?如何学习MFC?
    Windows桌面开发者的必备软件
    Comet技术选择,论Is node.js best for Comet?
    关于C/C++内存管理一些乱讲
    debug
    C语言趣味题目
    CSS之简单的双引号
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/15759005.html
Copyright © 2011-2022 走看看