AirtestProject 【更新公告】Airtest 更新至 1.2.7 版本

fishfish-yu · October 11, 2022 · Last by fishfish-yu replied at November 18, 2022 · 7968 hits

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

1. 前言

本次更新为 Airtest 库更新,主要是新增了设备释放接口、大量断言的语句,新增了对 Android 12L 的支持,对安装接口的增强,和若干 bug 的修复。

2. Airtest 版本提升至 1.2.7

1)新增了device.disconnect()接口

原先的 Airtest,在脚本长时间运行、或是使用了 AirtestIDE 反复连接多个不同手机时,可能会 建立大量 adb 连接未释放 ,一直占用资源。

这也会导致在部分手机上,反复切换横屏和竖屏应用时,会有概率 出现屏幕有一半内容变成黑屏 的问题。

因此,1.2.7 版本的 Airtest 新增了device.disconnect()接口,用于:

  • 在脚本中允许手动调用,让设备创建出的所有 adb 连接都强制释放掉,dev.disconnect(),如果还要继续使用这个设备对象,最好重新再创建一次 dev = connect_device("android:///")
  • 同时对连接的创建进行了更进一步的清理操作,避免黑屏问题的发生
2)新增了大量的断言语句

在脚本编写中,断言语句是非常重要的组成部分,但 airtest 旧版只支持 assert_existsassert_equal 两种类型的断言语句。

现在 Airtest1.2.7 版本,将所有断言语句单独放在 airtest/core/assertions.py 中,增加了更多类型,方便脚本编写工作。

目前 Airtest1.2.7 支持的断言列表:

  • assert_exists
  • assert_not_exists
  • assert_equal
  • assert_not_equal
  • assert_true
  • assert_false
  • assert_is
  • assert_is_not
  • assert_is_none
  • assert_is_not_none
  • assert_in
  • assert_not_in
  • assert_is_instance
  • assert_not_is_instance
  • assert_greater
  • assert_greater_equal
  • assert_less
  • assert_less_equal

我们也可以在 Airtest 的 API 文档中,找到所有断言接口及其说明:https://airtest.readthedocs.io/en/latest/all_module/airtest.core.assertions.html

3)支持设置断言时附带当前截图

Airtest1.2.7 除了让断言语句更加丰富以外,还支持设置断言时,是否附带截取当前画面的图片,然后显示在 Airtest 报告中,这样报告的断言内容会更加清晰,也更具有 airtest 的截图特色:

# 默认情况下,断言截图会开启
assert_exists()

# 如不需要断言时截取当前画面,则可以设置关闭断言的截图
assert_exists(截图,snapshot=False)
4)新增对 Android12L 的支持

Airtest1.2.7 已增加 minicap 对 android 12L 的支持,Poco 的支持可以将 pocoui 更新至 1.0.88 版本。

5)安装接口pm_install的增强

Airtest1.2.7 对 pm_install 接口进行了较大的增强:

  • 支持了安装参数的传入(与 adb.install 保持一致),
  • 支持了中文路径、一些包含特殊符号路径
  • 对路径的改动同时影响到了 adb.pull()adb.push() 接口,支持了中文路径、包含斜杠的路径(比如 \g 这样的字符也会有问题)、包含特殊符号(空格、括号等)的路径
  • pm_install 安装完毕后,会进行 adb shell rm apk 的操作,但在部分低配机型上可能会在这一步卡住超时(实际已经删除完毕,但代码一直不结束,导致整个脚本卡死),因此增加 timeout 30 秒自动结束
6)logwrap 增加截图参数

如果希望把自定义的函数也显示到 airtest 的报告中,可以使用 @logwrap,例如:

@logwrap
def func1():
    pass

如果希望在报告显示 func1内容的同时,还附带一张当前设备的截图的话,可以增加 snapshot=True 参数在 func1() 的定义中:

@logwrap
def func1(snapshot=True):
    pass
7)若干 bug 的修复
  • 尝试修复偶现的一个报告读取不到图片导致生成报告失败的问题
  • 兼容了 adb 获取屏幕信息超时的情况
  • 修复了一个 adb.text() 在输入字母 + 数字时可能会导致乱序的问题,同时支持空格
8)新增了 3 个 PR 的支持
  • 在 Windows 环境下,初始化 airtest.core.win.Windows 对象时,允许开发者选择性跳过 connect() 方法中的 set_foreground() 功能
  • Android.get_render_resolution 中增加应用包名参数, 使得 get_render_resolution 能够获取到除 top activity 以外的应用的渲染区域
  • 修复 win 和 linux 的 start_app 缺少的传参

【tips】关于本版本更新内容的更多示例,可以持续关注我们后续的推文,后续都会展开给同学们介绍对应的接口实例。

3. 如何更新

因本次更新仅更新了 Airtest 库,所以同学们目前只能在自己本地 python 环境中,将 Airtest 更新到最新版本:

pip install -U airtest

对于使用 AirtestIDE 的同学,可以等我们发布 1.2.15 版本的 IDE,或者在旧版本 AirtestIDE 中设置使用本地 python 环境,然后将本地 python 环境的 Airtest 库升级到最新版本即可。

4. 其它问题

如同学们在使用新版的 Airtest 时遇到了一些问题无法解决,可以通过此网站向我们的开发者快速提单:https://airtest.netease.com/issue_create

可以在标题中加入 “Airtest1.2.7” 之类的字眼,方便我们快速筛选和排查。


Airtest 官网https://airtest.netease.com/
Airtest 教程官网https://airtest.doc.io.netease.com/
搭建企业私有云服务https://airlab.163.com/b2b

官方答疑 Q 群:117973773

呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~

共收到 6 条回复 时间 点赞
1Floor has deleted

支持 Android 12L 涉及到的 PocoService.apk 源码没 push 吗?

IDE 啥时候更新啊

断言丰富太多了👏 👏 👏

Pactortester 回复

还没这么快,稍晚一点

回复

已经 push 了哈,把 poco 更新到 1.0.88 即可,

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up