六、Airtest的录屏操作

1. 前言

Airtest给我们提供了录屏功能,可以录制脚本运行过程的视频,方便测试人员回放查看对应问题。

Airtest录屏

需要注意的是,Airtest的录屏功能 目前仅适用于安卓平台(安卓真机/部分安卓模拟器) ,iOS平台暂不支持录屏操作。

2. 在命令行使用--recording录屏

在命令行使用 airtest run 运行脚本时,我们可以通过添加 --recording 参数来录制脚本运行的视频。(运行结束后,录屏文件会默认保存在log文件夹里面,使用 recording_手机序列号 来命名录屏文件)

  1. airtest run "D:\test\Airtest_example.air" --device android://127.0.0.1:5037/emulator-5554?cap_method=MINICAP_STREAM^&^&ori_method=MINICAPORI^&^&touch_method=MINITOUCH --log "D:/test\41f68fdf265d8c13998d0a1a7b992889" --recording

QQ图片20201021150559

并且airtest1.1.6及更高版本,支持 --recording 参数后面加上一个文件名来命名录屏文件 ,例如 --recording test.mp4 ,如果有不止一台手机在运行,会把文件命名为 手机名_test.mp4 。下述示例使用 --recording 123.mp4 指定录屏文件名为 123.mp4

  1. airtest run "D:\test\untitled.air" --device android://127.0.0.1:5037/emulator-5554 --log "D:/test\6fe87b11ca1fc75ebe670439f20fabfc" --recording 123.mp4

1

另外我们需要注意下,传入的录屏文件名必须以 .mp4 作为结尾!

3. 在脚本中调用录屏方法

除了在命令行使用 --recording 参数来录制脚本运行的视频之外,我们还可以直接在脚本中调用开始录屏和结束录屏的方法来帮助我们录制脚本运行过程的视频。

使用的方法分别是 start_recording()stop_recording() ,方法详情可以参看此链接的内容,https://airtest.readthedocs.io/zh\_CN/latest/all\_module/airtest.core.android.recorder.html?highlight=recording#airtest.core.android.recorder.Recorder.start\_recording

脚本示例如下:

  1. # -*- encoding=utf8 -*-
  2. __author__ = "AirtestProject"
  3. from airtest.core.api import *
  4. from airtest.core.android.recorder import *
  5. from airtest.core.android.adb import *
  6. auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554"])
  7. adb = ADB(serialno="emulator-5554")
  8. recorder = Recorder(adb)
  9. # 开启录屏
  10. recorder.start_recording(max_time=10)
  11. touch(Template(r"tpl1603091574169.png", record_pos=(0.113, -0.302), resolution=(900, 1600)))
  12. sleep(3.0)
  13. # 结束录屏
  14. recorder.stop_recording(output="test.mp4")

需要注意的是,录屏的这两个方法 属于 Recorder(adb) ,所以我们在使用这2个方法之前,要先实例化这个类,之后再用这个实例去调用类里面的关于录屏操作的方法。

在这两个方法中,有2个参数我们可以特别关注下:

一个是 start_recording()max_time 参数,可以用来 设置最长的录屏时间 ,默认值是1800,即半个小时,可以根据自己的实际需求修改这个录屏时长。如果脚本的运行时长小于这个 max_time 的值,则录屏时长以脚本实际运行时长为准。但如果脚本运行时长大于 max_time 的值,那录屏时长以 max_time 的时长为准。

第二个是 stop_recording()output 参数,可以用来 设置录屏文件的文件名 ,默认为 screen.mp4 ,默认的保存路径和项目目录一致。

2

4. 不一样的录屏方式

1)IDE1.2.3-1.2.5

airtest1.1.3版本和1.1.4版本(IDE1.2.3-1.2.5)使用 Yosemite.apk 来进行录屏操作,但比较特别的是,初次使用录屏功能时 需要同学们手工打开 Yosemite.apk 去点一次同意权限 ,很多同学都不知道还有这一个步骤,所以录屏操作经常因为没有给到权限,而出现录屏失败的情况。

3

2)IDE1.2.6及更高版本

airtest1.1.6及更高版本(IDE1.2.6及更高版本),则把录屏功能的代码 回退到了之前不用 Yosemite.apk 录屏的版本 。回退到旧版本之后,同学们便 不用手动再去 Yosemite 应用里面点一次同意权限(注意是1.1.6版本或更高版本的airtest),直接使用相关的参数和方法即可。

5. Airtest录屏常见问题

1)部分模拟器不支持录屏

安卓模拟器的录屏机制和安卓真机的录屏机制存在一些差异,因此,我们并不能保证在所有的模拟器上面都能够进行录屏操作,比如雷电模拟器可以进行正常的录屏操作,但 在夜神模拟器上录屏时就容易报错

所以我们 不是非常建议在模拟器上使用录屏功能

4

2)密码界面录屏黑屏

在测试部分品牌手机的过程中,有同学会发现一到输入密码的界面时,设备画面就全黑了,导致录出来一部分黑屏的内容。这是因为在密码输入的界面,一般都做有一些防止恶意截屏录屏的措施。如果同学们不想出现黑屏画面的话,我们可以尝试在安全设置中,把安全键盘之类的设置关掉 ,或者是 关掉其它一些防止恶意截屏录屏的设置

3)竖屏录屏右侧的“黑边”

很多同学录屏后,播放录屏文件时,会发现竖屏真机的录屏右侧有一大块“黑边”:

image-20211117115914217

其实这并不是什么异常,就是为了兼容横屏录屏特意留下来的,同学们无需理会,也不用额外处理,目前还不支持去掉右侧这块黑色的画面。

4)设置录屏的质量

start_recording支持传入 bit_rate_level 参数来修改录屏的质量,取值范围[1,5],数字越大,视频越清晰:

image-20211117114240660

录屏质量

但需要注意的是,越清晰的录屏质量,意味着录屏文件也越大,甚至可能出现1个10分钟的录屏文件就达到1G多,所以我们并不是非常建议使用很清晰的录屏质量来保存你的录屏文件。

5)重新开启录屏失败

在脚本中开启录屏之后,可能因为某些错误导致中间的脚本运行失败,最终没有运行到结束录屏的脚本;此时再次开启录屏时,将提示start recording error

image-20211117114851151

此时我们可以打开手机上安装的Yosemite.apk,手动点下结束录屏;也可以单独运行下结束录屏的代码,再来重新开启录屏即可。更好的方式是,在编写脚本时,就写一个逻辑,不论中间的脚本是否运行成功,开启录屏之后,最终都会运行结束录屏,可以有效避免这个问题。

6)录屏没有声音

目前Airtest的录屏文件是没有声音,暂时还没有解决办法。

7)start_recording first

未开启录屏,直接调用结束录屏stop_recording会出现如下报错:

image-20211117143035347

8)其余录屏问题

如还遇到了其它关于Airtest的录屏问题,可以提供详细的设备型号、复现代码、报错log/截图,给我们的项目开发者快速提单:https://airtest.netease.com/issue\_create