Skip to content

前言

通过阅读本小节教程,你将了解以下内容:

  • 报告页面内容
  • 报告功能介绍
  • 如何生成报告

(本文内容基于IDE1.2.6或Airtest1.1.6)

报告页面

image

报告主要分为两部分:
①在报告的上半部分,可以看到与报告相关的一些信息,比如:报告的名称、作者、报告描述(可自定义,详见下文)以及快览等等。点击任意一张快览,下方会展示相应的测试信息。
②报告的下半部分,详细展示了每一个测试动作及其执行情况。单击左侧的测试动作,右侧会显示出相应动作执行结果的详细情况。并且我们还可以在右侧对不同执行结果进行筛选。

image

报告功能介绍

自定义部分报告信息

如果在脚本中写到了以下的内容,将会在报告中显示出来: - __author__对应脚本作者 - __title__对应脚本标题 - __desc__可以写较长的脚本描述,将会显示到页面中,如果超过一定行数将会自动折叠

image

image

image

如果想单独获取到脚本里填写的这些对应信息,可以使用命令行:airtest info 脚本路径, 可以获得airtest解析出来的脚本信息,类似这样的返回值:

>airtest info untitled.air
{"name": "untitled.air", "path": "untitled.air", "author": "user", "title": "脚本标题", "desc": "用例描述"}

显示log.txt

显示log.txt、步骤绝对时间等

image

步骤导航,断言显示用户输入的msg

image

步骤增加查看上下文功能

筛选了某些测试动作之后,如果想查看某个测试动作的上下文,可以点击该测试动作右边的“眼睛”图标,即可在全部测试动作中定位到该测试动作的上下文。

image

增加图片缩略图和缩略图定位功能

点击不同的缩略图,会显示对应步骤的执行情况

image

截图点击可放大

报告中的截图,鼠标单击可放大显示

image

image

修复部分浏览器打开报告页面为空的情况

目前我们已经修复了部分浏览器打开报告后报告页面为空的情况,后期我们也会持续修复,敬请期待。另外建议用谷歌浏览器打开airtest报告,兼容效果更好。

可自定义全局/单张截图的压缩精度

可以用如下形式自定义截图压缩精度:

① 使用命令行启动,airtest run ... --compress quality

② 在脚本中自定义,优先级高于命令行,取值范围是1-99的正整数,airtest默认取10,如果希望获得更高精度的图片可以改为75、90等

import airtest.core.api import *
ST.SNAPSHOT_QUALITY = xxx  # [1, 99]

# 在报告的该touch步骤中,保存的截图的精度为全局精度xxx
touch(xx)
# snapshot保存的截图精度也是全局精度xxx
snapshot()

③ 设置某张图片的压缩精度,

snapshot(quality=my_quality)

自定义报告截图的最大尺寸

新增一个用于指定截图最大尺寸的设置:ST.IMAGE_MAXSIZE 。假如设置为1200,则最后保存的截图长宽都不会超过1200,有利于进一步缩小截图的图片尺寸。

# 设置截图尺寸不超过600*600,如果不设置,默认为原图尺寸
ST.IMAGE_MAXSIZE = 600

# 在报告的该touch步骤中,保存的截图尺寸不超过600*600
touch(xx)  
# 截图质量为90,尺寸不超过1200*1200
snapshot(filename="test2.png", msg="test02", quality=90, max_size=1200) 
# 不设置的情况下,默认采用ST中的全局变量的数值,即600*600
snapshot(msg="test12")

用log()接口在报告中显示信息/报错

在脚本中记录log的 log() 接口,支持4个参数:

  • args, 可以是字符串或是 traceback 对象,现在还支持传入非字符串,并且对py2做了一下兼容。假如传入的是 traceback 对象,将会自动在报告中标记为报错步骤,否则就是显示正常的 log 内容。
  • timestamp, 参数可以自定义当前这条 log 的时间戳,默认为当前时间(在记录一些长时间的回调中获取到的 log 时,原本默认使用写入本条 log 的时间,但是可能需要修改为 log 产生的时间,比如几分钟前)
  • desc , 自定义一个 log 标题,在报告中有更好的展示效果
  • snapshot, 是否需要截取一张当前的屏幕图像并显示到报告中,方便查看。(同时,因为这个参数的加入,现在airtest脚本如果因为执行Poco语句失败报错而终止时,能够额外截取一张当前画面,方便大家排查问题。)

示例:

data = {"test": 123, "time": 123456}
# 第一条log,步骤名显示title,截取一张屏幕截图
log(data, timestamp=time.time(), desc="title", snapshot=True)
# 第二条log,标记为报错步骤并截取一张屏幕截图
try:
    1/0
except Exception as e:
    log(e, snapshot=True)
# 第三条log,显示传入的字符串
log("中文")

image

如何生成报告

在IDE里点击生成报告按钮来生成报告

在运行脚本后,可以立即在log窗口中看到当前脚本执行成功还是失败,然而不能够看到更加详细直观的执行结果。在AirtestIDE中,可以点击上侧图标菜单的最后那个“查看报告”的按钮,快捷键为Ctrl+L,稍后片刻将会自动使用默认浏览器打开结果报告页面:

image

另外,我们可以在AirtestIDE上右键点击脚本标题,选择“打开报告”,来打开log所在的文件夹。

image

使用命令行来生成报告

我们的脚本运行过程,与报告生成过程是独立的两个步骤,所以我们可以先用airtest run 指令来运行脚本:

 # 用airtest运行了untitled.air这个脚本
 # airtest run 后面接的是脚本文件的路径
 >airtest run untitled.air

值得注意的是,如果airtest run 指令没有指定--log参数,将不保存log内容和截图,且命令行会提示do not save log;如果指定--log log/, 将把生成的log内容放到当前命令行的执行目录里;如果指定了--log +某个指定目录 参数,log内容与截图将会放在指定目录里。

然后,我们可以运行 airtest report 指令来生成一份HTML格式的报告:

# 最简单的命令行,log文件与脚本文件在同一文件夹里
# 运行以下指令,在当前目录生成一个log.html
>airtest report untitled.air
log.html

airtest report必须传入的参数就是我们的运行脚本,其他支持的可选参数比较多,具体可以查阅 Airtest_generate-html-report ,这里给出一个最常见的命令行范例:

>airtest report untitled.air --log_root log/ --outfile log/log.html --lang zh

上述代码中:
--log_root log/表示用当前目录下,log/目录里面的log内容来生成了一个html报告;
--outfile log/log.html表示将这个html报告放在log目录下,命名为log.html;
--lang zh表示指定显示语言为中文。

由于有时我们需要将报告拷贝到另外一个目录,或者是打包发给别人查看,但是直接生成的报告是无法复制到别的目录下查看的。原因是,直接生成的报告,所有的图片、静态资源文件都用了绝对路径,所以不能直接复制到别的电脑上查看,但是自己的电脑复制到别的目录,是可以看的。所以我们提供了一个导出模式,在刚才的report指令后面添加一个参数 --export 导出目录路径,即可将报告完整导出到一个文件夹中,方便查看。

另外,我们可以 直接复制AirtestIDE里运行脚本时显示在log窗里的指令来运行 ,因此在生成报告时同样也可以这样做:先点击AirtestIDE里的生成报告按钮,等log窗口中出现了生成报告的命令行之后,复制它到你的命令行窗口中,就可以自由运行了。(需要注意的是,如果复制到命令行窗口的指令中包含路径的话,需要将指令里面所有的路径单独用英文模式下的双引号括起来,否则会导致命令行执行报错)

报告中的静态资源文件和图片文件的读取

在使用 airtest report 指令生成的报告中,使用了绝对路径来访问里面的图片文件,同时HTML报告中访问的静态css与js资源文件,也是硬盘上的绝对路径(默认在airtest的安装目录下的report文件夹里)。因此,假如想要发送报告给其他人观看,就必须要在命令行末尾加上 --export 导出目录,将报告导出到一个指定目录中,然后将整个目录发送给别人观看。

静态文件路径读取路径对比: - 默认情况下,报告页面中使用绝对路径访问图片和资源文件 - 使用–export参数导出报告,页面中使用相对路径访问图片和资源文件

因此,如果要将报告部署到服务器上供其他人查看,同样需要使用 --export 参数来导出报告,这样可以使图片路径为相对路径。

同时,可以使用 --static_root 静态资源目录 参数,来指定静态资源文件的路径(即报告中的css, js等文件)。我们可以将资源文件部署到静态资源文件服务器上,用例如 https://host:port/static/css/ 的路径来访问它,然后在生成报告时,将这个部署出来的服务器地址作为 --static_root 的参数传过去,这样报告中会默认去访问这个URL读取静态资源文件,避免导出报告时重复拷贝这些资源文件造成的磁盘空间占用。

airtest report untitled.air --log_root log/ --outfile log/log.html --lang zh --static_root https://host:port/static/css/ --export ./report
使用了poco语句的报告

由于默认报告是airtest的专属报告,对于poco语句的支持不够完善,因此我们用插件的形式来补充支持poco语句:在你的报告命令行最末尾添加指令--plugin poco.utils.airtest.report 即可。

使用selenium插件的报告指令

如果脚本中使用了我们的selenium插件,在生成报告的命令行最后,请加入--plugin airtest_selenium.report,可以让报告支持selenium元素。详情请查阅 Airtest-Selenium 文档。

使用Python代码生成报告

通常情况下,我们是通过命令行来生成报告的,不过由于Airtest是python第三方库,所以当然也可以简单地调用接口来生成报告,首先,我们需要先新建脚本-选择纯.py文件,然后在创建时需要勾选生成log:

image

然后点确定后,会自动生成一个.py的模板,写好脚本之后,我们可以用下面的代码调用接口来生成报告:

# generate html report
from airtest.report.report import simple_report
simple_report(__file__)

上述代码 simple_report 使用的是默认参数,此时需要初始化auto_setuplogdir,如 auto_setup(__file__, logdir=True,devices=[ "Android:///", ]),如果不进行初始化,将无法生成log.txt,报错如下:

image

而进行初始化之后执行脚本,会在脚本目录下生成log.html和log文件夹(里面存放着log.txt)。但如果我们手工指定了logdir的目录,log.txt将会在指定的目录下生成。

另外,simple_report 的更多参数也可以参考 文档 。其中可以传入logpath= 来手工指定脚本的log目录,以此简单地生成 log.html

如果有更加复杂的需求,例如需要指定导出目录 export_dir ,或是脚本中使用了poco语句,需要用到--plugin poco.utils.airtest.report ,请参考文档 LogToHtml