尽管 Airtest 脚本运行过程中会输出非常丰富的 log 信息,并且 Airtest 报告也会把我们脚本的的运行步骤显示出来,但有时候,我们会需要在脚本里面,插入一些自定义的 log 内容(比如某些关键点),并且显示在 Airtest 报告中。
这里就要用到 Airtest 提供的 log()
接口了。
我们建议大家使用最新版本的 Airtest 来体验这个 log()
接口,该接口支持传入字符串、非字符串和 traceback
对象:
我们可以给 log()
接口传入 1 个字符串,来非常便捷接插入一条简单的 log 记录:
log("插入一条log记录")
运行后,我们不仅可以在 log 查看窗的 log 日志中看到我们插入的 log 记录:
[16:02:07][INFO]<airtest.core.api> 插入一条log记录
还可以在生成的 Airtest 报告中查看到这条 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,并且标记为错误步骤:
上述 2 种 log,已经可以满足我们大部分的 log 需求了,但是有时候,我们可能会有一些复杂 log 记录需求,比如 dict
、list
这些,所以 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 的标题和详细内容:
另外, log
接口还支持非常丰富的参数,比如自定义时间戳 timestamp
:
# 该条log的时间被定义为当前时间
log("自定义log的时间戳", timestamp=time.time())
# 该条log的时间被定义为5秒之前
t1 = time.time()
time.sleep(5)
log("自定义log的时间戳", timestamp=t1)
如果是插入 1 条简单的字符串 log,默认会取该字符串作为 log 的标题显示在报告步骤上;但我们也可以通过 desc
参数,来自定义一些复杂 log 的标题,像示例 3)那样,就有自定义 log 的标题。
当然,这对传入普通字符串的 log 也是同样适用的:
log("123",desc="这是1条log")
有一些情况下,插入一些关键的 log 还不足以让我们去看到更多的信息,所以我们支持在保存 log 的同时,截取当前的屏幕画面,去获取更多的测试信息:
log("截图log",snapshot=True)
那其实在 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 信息了:
那今天我们介绍了增加自定义 log 的接口,以及如何过滤 Airtest 大量 log 里面我们不关注的部分,后续我们还会持续跟大家分享下,如何把 log 内容保存在文件中,感兴趣的同学可以关注我们,避免错过后续的推文内容哦!