上期回顾:Airtest API精讲之设备连接管理API集合
以下基于
python3.8;airtestIDE1.2.13;airtest1.2.4;pocoui1.0.85
Airtest提供了录屏功能,可以在运行自动化脚本的同时进行录屏,方便事后查看或排查问题。不过录屏功能仅支持安卓平台,iOS不支持。
通过命令行运行时录屏
之前我们已经介绍过airtest run运行脚本,Airtest命令行运行airtest run详解
在命令行最后只要加上--recording
就会录屏。脚本结束后,在log文件夹会生成recording_手机序列号.mp4
。
也可以自定义录屏文件名,在命令行最后加上--recording 自定义文件名.mp4
,如果有不止一台手机在运行,会把文件命名为手机序列号_test.mp4
示例:
airtest run "D:\qasite.air" --device "android:///" --log "D:\log" --recording qasite.mp4
通过脚本运行时录屏
将录屏接口写在脚本中,直接运行脚本也可录屏。会用到Recorder类的start_recording()和stop_recording()方法。
start_recording()有如下参数:
-
max_time:最长录屏时间,单位秒,默认1800秒。如果设定值<1800则取设定值,>1800,取1800,即最长只能录半小时。
-
bit_rate:清晰度,值范围1-5,数字越大越清晰,文件体积也越大,默认值1
stop_recording()有如下参数:
-
output:录屏文件名,如qaiste.mp4
-
is_interrupted:是否异常中断,为True表示异常中断,结束录屏但不保存视频,默认值为False。
演示实例
__author__ = '公众号:测试工程师小站'
from airtest.core.api import *
from airtest.core.android.recorder import *
from airtest.core.android.adb import *
auto_setup(__file__, devices=["android:///s59z8h7"])
adb = ADB(serialno="s59z8h7")
recorder = Recorder(adb)
recorder.start_recording(max_time=60, bit_rate_level=5)
touch([500,500])
sleep(6)
recorder.stop_recording(output="qasite.mp4")
录屏常见问题
以下是从官方文档中摘录的常见问题及解决办法:
1)部分模拟器不支持录屏
安卓模拟器的录屏机制和安卓真机的录屏机制存在一些差异,因此,我们并不能保证在所有的模拟器上面都能够进行录屏操作,比如雷电模拟器可以进行正常的录屏操作,但在夜神模拟器上录屏时就容易报错。
所以我们不是非常建议在模拟器上使用录屏功能。
2)密码界面录屏黑屏
在测试部分品牌手机的过程中,有同学会发现一到输入密码的界面时,设备画面就全黑了,导致录出来一部分黑屏的内容。这是因为在密码输入的界面,一般都做有一些防止恶意截屏录屏的措施。如果同学们不想出现黑屏画面的话,我们可以尝试在安全设置中,把安全键盘之类的设置关掉 ,或者是关掉其它一些防止恶意截屏录屏的设置。
3)竖屏录屏右侧的“黑边”
很多同学录屏后,播放录屏文件时,会发现竖屏真机的录屏右侧有一大块“黑边”:
其实这并不是什么异常,就是为了兼容横屏录屏特意留下来的,同学们无需理会,也不用额外处理,目前还不支持去掉右侧这块黑色的画面。
4)重新开启录屏失败
在脚本中开启录屏之后,可能因为某些错误导致中间的脚本运行失败,最终没有运行到结束录屏的脚本;此时再次开启录屏时,将提示start recording error :
<module>
recorder.start recording()
File "airtest\utils\snippet.py",line 125,in ready_func
File "airtest\core\android\recorder.py",line 50,in start_recording
RuntimeError:start recording error
此时我们可以打开手机上安装的Yosemite.apk,手动点下结束录屏;也可以单独运行下结束录屏的代码,再来重新开启录屏即可。更好的方式是,在编写脚本时,就写一个逻辑,不论中间的脚本是否运行成功,开启录屏之后,最终都会运行结束录屏,可以有效避免这个问题。
5)录屏没有声音
目前Airtest的录屏文件是没有声音,暂时还没有解决办法。
6)start_recording first
未开启录屏,直接调用结束录屏stop_recording会出现如下报错:
File "airtest/utils/snippet.py",line 108,in ready _func
File "airtest/core/android/recorder.py",line 92,in
stop recording
airtest.core.error.AirtestError:'start recording first'
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~