Airtest全称AirtestProject,是由网易游戏推出的一款自动化测试框架,在软件测试的时候使用到了该框架。这里记录一下安装、使用和遇到的坑的问题…
Airtest的官网介绍项目构成
Airtest:是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS
Poco:是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用
源码
AirtestIDE:跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写Airtest和Poco代码。
AirLab:真机自动化云测试平台,目前提供了TOP100手机兼容性测试、海外云真机兼容性测试等服务,请访问官网以了解更多
如何上手?
项目基于Python,因此写出来的所有脚本都是Python代码,建议在使用前,先学习Python的基础语法知识。
在编写自动化脚本时,可以配合官方提供的AirtestIDE编辑器,能够快速编写脚本。
自动化脚本,以及Airtest和Poco,都是基于Python的,因此也可以使用自己喜欢的Python编辑器来编写脚本
一、安装
Airtest有两种安装方式,一种是下载安装AirtestIDE,该IDE自带一个python环境和Airtest库。支持可视化选取组件测试。缺点就是你自己安装的Python环境和第三方模块无法在这IDE中使用,只能重新安装相关模块。
在使用中先是安装了AirtestIDE,在官网很快就可以下载安装使用。打开IDE,左边是Airtest辅助窗口和Poco辅助窗口,Airtest辅助窗口可以快速完成截图识别图片加点击、滑动等操作代码的生成。而Poco辅助窗口可以查看应用控件树,快速生成与应用控件操作的相关代码。中间则是代码编辑框和Log窗体,用于编辑代码和查看输出结果等信息。右边是设备窗口,可以进行连接设置和设备选定,当选定设备后,右边的设备窗口将会变为被选定设备的当前UI界面。IDE界面如下图所示。
二、使用
可以从官网的介绍了解到Airtest采用了图形脚本语言Sikuli的思路,使用者不需要一行行的编写测试的代码,而是用截图的方式生成相关的操作代码(当然熟悉相关Api的也可以用手写代码方式)。下图所示为通过截图实现的小Demo。
官方文档: 欢迎使用 - Airtest Project Docs
三、在本地环境中使用及遇到的问题
1.使用"pip install airtest" 进行安装
项目支持Python(2.7或<=3.6)的运行环境,官方更推荐使用 Python3。在实践过程中, 起初没有在意这个python版本的问题,仍坚持使用了python3.8环境进行安装,但是python3.8及以上版本是不能正常安装。安装时会报如下错误:
ERROR: Could not find a version that satisfies the requirement opencv-contrib-python<=3.4.2.17 (from airtest) (from versions: 3.4.8.29, 3.4.9.31, 3.4.9.33, 4.1.2.30, 4.2.0.32, 4.2.0.34)
ERROR: No matching distribution found for opencv-contrib-python<=3.4.2.17 (from airtest)
因为Airtest依赖的opencv-python的版本要小于3.4.2.17,而python3.8只能安装版本大于3.4.2.17的opencv-python库,即使你下载了opencv-python 3.4.2.17版本以上的whl文件进行本地安装也是行不通的,安装的时候python3.8的环境下会报error提示不支持安装此版本的opencv。
解决方法:可以安装两个版本python,使用时进行切换环境;或者降低python版本;或者直接使用AirtestIDE…
2.IDE连接不存在设备或被占用设备容易假死
在进行远程连接时,如果尝试连接一个不存在的设备,或者已经被占用的设备,会造成IDE几秒假死;
3. 假死期间关闭IDE会造成adb驻留
在IDE假死期间关闭IDE,则adb有可能不会正常退出造成驻留,造成再开一次IDE又会唤起一个新的adb进程。这个情况是偶发性的,有时候能在假死的时候复现出,有时候不能。
4.尝试连接不存在设备时,即使设备是不存在的也会加入列表
当尝试连接不存在设备时,即使设备是不存在的也会加入列表,状态显示的是offline。通常来说,通过 adb devices命令应该可以查看到连接的设备,不知道这样显示是不是有别的用意。除此之外,模拟器是需要进行adb connect才能在IDE中进行操作的。因此,还遇到了有时候进行连接时,会出现即使设备在线(已经确定端口没被占用),也是显示offline。
四、最后啰嗦几句
AirtestProject作为近几年开发的移动自动化测试框架来说,其特点可谓鲜明。其一,支持跨平台;其二,对于原生应用、Hybird应用、Web应用都有很好的支持度,还支持移动游戏测试。其三,采取图形脚本语言Sikuli的思路,通过相应的IDE可以选取动作加截图实现代码的编写。同时项目在Github上开源,Issue有较好的活跃度。
在实际使用过程中,健全的开发者文档帮助解决了很多问题。虽然内容后面描述了很多IDE的BUG, 并不意味着AirtestProject不是一个好的自动化测试框架。毕竟IDE只是一个编辑器,不代表项目本身。相反,Airtest的各种特性让其表现出色。使用AirtestIDE让人快速上手开发的特点也不会因为这些BUG表现很糟糕。在使用时可以通过一些操作避免BUG发生,比如连接时不要频繁点击,假死关闭时把相应的进程也给清除,连接不上可以重新启动模拟器或者查看相应端口是否被占用等。总而言之,我相信AirtestIDE在之后会进行更多的优化…
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】