专栏文章 用命令行运行 Airtest 脚本并生成报告的常见问题

fishfish-yu · 2019年12月25日 · 最后由 fishfish-yu 回复于 2023年04月26日 · 6746 次阅读

前言

本文将详细介绍如何使用命令行运行脚本、生成报告以及读取报告中的静态资源文件和图片文件

要用命令行来完成以上的任务,我们就需要用到本地的 python 环境。所以我们必须保证本地的 python 环境安装了airtest,否则在执行以上任务时,就会出现 airtest distribution was not found 的错误:

我们可以使用pip list命令来查看当前环境是否安装了airtest

如果当前环境没有安装airtest,就使用 pip install airtest 命令,然后等待安装完成即可。

使用命令行运行脚本

脚本的运行过程,与报告的生成过程是独立的两个步骤,所以我们可以先用airtest run + 脚本文件路径 指令来运行脚本,该命令的可传参数如下:

  • --device,用来指定连接的被测设备
  • --log,用来指定 log 内容和截图存放的目录
  • --recording,运行脚本时进行录屏操作

下面分别介绍下这几个参数的使用方法:

--device

在脚本运行的时候,我们必须连接上一个被测设备。如果在我们脚本的airtest语句之前,没有对设备进行初始化,比如没有运行一个connect_device的语句之类的,在使用airtest run 指令来运行脚本时,就必须传入--device参数,否则命令行会报如下错误:

传入--device参数即可解决上述问题:

# 用airtest运行了report_test.air这个脚本
# airtest run 后面接的是脚本文件的路径
# device参数后面可跟Android、iOS和Windows设备
airtest run  D:/test/report_test.air --device Android:///
--log

如果 airtest run 指令没有传入参数--log,那使用命令行运行脚本时,将不保存 log 内容和截图,并且命令行会提示do not save log

如果传入的参数为--log log/, 将把生成的 log 内容放到当前命令行执行目录下的 log 目录里面:

如果在--log 参数里传入了指定目录,log 内容与截图将会放在指定目录里,如图:

--recording

需要在脚本运行时进行录屏操作,则在使用airtest run命令时传入--recording参数即可,录制的视频文件会以 MP4 格式保存在 log 内容所在的目录里面。

airtest run D:/test/report_test.air --device Android:/// --log log/ --recording

使用命令行生成报告

在命令行中,使用airtest run指令运行脚本以后,我们就可以使用airtest report + 脚本文件路径指令来生成一份 HTML 格式的报告。

该命令也有非常多的可传参数,例如:

  • --log_root,指定 log 内容和截图文件所在的目录
  • --outfile,指定生成报告的目录
  • --lang,指定报告语言,可以是中文/英文
  • --export,导出一个包含所有资源的报告文件
  • --static_root,指定静态资源文件的路径

需要注意的是,使用 airtest report 指令但没有传入任何参数时,程序会默认去脚本文件所在目录下寻找log/log.txt,然后用找到的内容来生成 HTML 格式的报告,该报告存放于当前命令行的执行目录下。如果脚本目录里面不存在log/log.txt,命令行则会报错:

所以不传入任何参数来使用airtest report 指令时,需要保证运行时产生的 log 内容的文件夹必须与脚本文件在同一文件夹内:

--log_root

一些情况下,我们运行脚本时并没有把 log 内容和截图文件存放在与脚本文件相同的目录下,这时可以用--log_root参数来指定 log 内容和截图文件所在的目录。假如 log 内容保存在当前执行目录下的 log 文件夹里,我们就可以这样指定:

C:\Users\xiaoming>airtest report D:/test/report_test.air --log_root C:/Users/xiaoming/log
log.html
# 命令行显示的log.html表示在当前执行目录下生成了报告log.html
--outfile

当我们不想报告保存到当前执行目录下时,我们就可以用--outfile参数来指定报告生成的目录:

airtest report D:/test/report_test.air --log_root C:/Users/wb.yuxiaojuan/log --outfile E:/log_test/log.html

--lang
  • 指定报告语言为中文:--lang zh
  • 指定报告语言为英文:--lang en

注意:如果不指定报告的语言,默认的报告语言为英文。

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

-- export

不传入-- export参数的情况下使用 airtest report 指令,在生成的报告中使用了绝对路径来访问里面的图片文件;同时 HTML 报告中访问的静态 css 与 js 资源文件,也是硬盘上的绝对路径(默认在airtest的安装目录下的report文件夹里)。

因此,直接把 HTML 格式的报告发送给别人观看,别人是没办法正常观看的。这时我们可以传入 airtest report指令的--export参数,将报告导出到一个指定目录中,然后将整个目录发送给别人观看(该目录会包含报告的静态资源文件和图片文件)。

# 使用了export参数,outfile参数会失效,所以使用了export参数就不要使用outfile
airtest report D:/test/report_test.air --log_root C:/Users/wb.yuxiaojuan/log --lang zh --export E:/log_test/

导出报告的页面中会使用相对路径访问图片和资源文件:

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

--static_root

每次导出报告时,目录下都会有一份静态资源文件static,它包含了报告中的 css 和 js 等文件。一般来说,除非报告的样式做了某些更新,否则这些静态资源文件都是固定不变的。

所以我们可以将这些资源文件部署到静态资源文件服务器上,用例如 https://host:port/static/css/ 的路径来访问它。然后在生成报告时,将这个部署出来的服务器地址作为 --static_root的参数传过去:

airtest report D:/test/report_test.air --log_root C:/Users/xiaoming/log --lang zh --static_root https://host:port  --export E:/log_test/

这样报告中会默认去访问--static_root参数传入的服务器地址上,读取静态资源文件,避免导出报告时重复拷贝这些资源文件造成的磁盘空间占用。

如想向我们反馈关于 AirtestProject 想了解的问题,欢迎到公众号后台留言。

共收到 8 条回复 时间 点赞

可否讲一下直接 python 调用 api 的用法,

苏志宇 回复

能否举个例子?你想调用哪个 api

web 脚本,运行怎么生成不了 mp4 文件
airtest run D:/test/report_test.air --log log/ --recording

Tina Tang 回复

web 平台不适用,这个是安卓平台的

fishfish-yu 回复

好的,谢谢,要是以后 web 端也能实现录制视频就好了

Tina Tang 回复

我可以先记一下这个需求😃

想问一下 怎么在 AirtestIDE 中编写脚本同时导出 html 报告(执行脚本到指定目录,他人可以查看的)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册