AirtestProject浅尝辄止

AirtestProject是什么

AirtestProject是由网易游戏推出的UI自动化测试解决方案,主要包含3部分内容:
1.Airtest框架:跨平台的,基于图像识别的UI自动化测试框架,支持平台有Windows、Android和iOS。
2.Poco框架:基于UI控件识别的自动化测试框架,目前支持Android原生、iOS原生、Unity3D、cocos2dx、UE4和Egret等平台,也可以在其他引擎中自行接入poco-sdk来使用。
3.AirtestIDE:跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写Airtest和Poco代码。

关于AirtestProject的具体介绍,详见:AirtestProject官方文档

AirtestProject简单示例

所谓AirtestProject的应用实践,即使用AirtestIDE编写Airtest和Poco代码,实现对APP的自动化操作。
对于一个从未接触过AirtestProject的新人而言,要使用AirtestProject完成对指定APP的自动化操作,实现步骤如下:
第一步:到这里下载最新版的AirtestIDE,解压到指定位置,双击AirtestIDE.exe启动编辑器。
启动AirtestIDE

在启动过程中会提示用户注册账户并登录,直接点击Skip跳过即可。

第二步:连接手机到主机,并打开调试选项,此时将会在AirtestIDE的右侧“设备窗”面板中看到已经连接的设备信息,点击“connect”按钮后即可看到手机界面。
AirtestIDE设备窗面板
AirtestIDE设备窗面板_手机界面

第三步:新建Airtest脚本,点击“文件->新建脚本->.air Airtest项目”,此时会弹出一个保存Airtest脚本的对话框,设置好文件名并选择指定目录,点击“保存”按钮。
新建Airtest脚本
保存Airtest脚本

第四步:开始编写Airtest自动化测试代码。实际上,借助于AirtestIDE编辑器可以直接在通过“Airtest辅助窗”面板中的按钮生成代码。
以打开“设置”APP为例,在“Airtest辅助窗”面板中点击“touch”图标,此时移动光标到右侧的“设备窗”面板中拖动鼠标选取“设置”APP图标,此时就会在脚本文件中自动生成一段代码。
点击设置APP图标
自动生成的初始化代码

第五步:运行脚本。在AirtestIDE编辑器中点击“运行->运行脚本”,此时从右侧设备窗面板中将看到“设置”APP被点击启动了。
至此,一个非常简单的Airtest脚本就完成了。在这个简单实例中仅仅只是打开了指定APP,并没有实现任何有价值的工作,但这已经足够说明如何编写Airtest代码并实现APP自动化的流程了。

AirtestProject深入实践

通过包名启动APP

启动APP除了可以通过Airtest的图标识别方式启动之外,还可以直接通过api方式指定APP包名启动,示例代码如下:

# -*- encoding=utf8 -*-
__author__ = "zhangsan"

from airtest.core.api import *

auto_setup(__file__)

# 通过api指定包名启动APP
start_app("com.android.settings") 

关于如果获取指定APP包名,网络上有很多教程,例如:使用adb 命令获取APP包名

引入其他Airtest模块

在一个正式的生产项目中,便于共用相同的逻辑,通常需要将一些公共的操作封装起来,Airtest支持引入外部的模块。
假设已经有一个封装了公共操作的Airtest模块,名称叫做“common.air”,其内容如下:

# -*- encoding=utf8 -*-
__author__ = "zhangsan"


from airtest.core.api import *
auto_setup(__file__)

#
# 启动APP
#
def start_app():
    start_app("com.android.settings")
    sleep(5.0)

在另外一个Airtest模块中可以引入该公共模块:

# -*- encoding=utf8 -*-

__author__ = "zhangsan"

from airtest.core.api import *

# 引入外部Airtest模块
using("common.air")
# 导入外部Airtest模块中的方法
from common import start_app

# 导入外部Airtest模块中的方法之后可以直接调用
start_app()

使用Poco定位元素

在之前的简单示例中是通过图片识别的方式实现元素定位的,其实还可以直接使用Poco框架使用表达式直接对APP中的元素定位。
需要注意的是:如果需要使用Poco框架定位元素,需要在脚本中加入对应的初始化代码。

# -*- encoding=utf8 -*-
__author__ = "zhangsan"

# 初始化Poco框架的代码
# 这段代码还可以在AirtestIDE编辑器左侧Poco辅助窗面板中选择对应设备类型自动生成
# 如下代码是选择Android设备自动生成的的代码
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

相比起使用Airtest定位元素,使用Poco框架定位元素比较精准,但是在查找元素的定位标识时相对麻烦和困难(可以通过Poco辅助窗中的“Poco Inspector”实现元素查找和定位)。
如下示例展示通过Poco框架定位并打开“设置”APP。

poco("android.widget.FrameLayout").offspring("设置,0条通知").click()

在实际项目中有如下经验:当使用Poco框架定位困难时,可以直接使用Airtest框架的图片识别方式进行定位。
总之,使用最方便的元素定位方式即可。

关于Airtest框架和Poco框架的详见:Airtest介绍Poco介绍

查看测试报告

AirtestProject项目是一个自动化测试解决方案,自然是需要有测试结果的报告说明的。在AirtestIDE编辑器中点击“运行->打开报告目录”即可在浏览器中查看对应的测试报告详情。
查看测试报告

运行测试脚本

通常在开发环节时,直接在AirtestIDE编辑器中运行Airtest自动化测试脚本是非常方便和直接的。但是当开发完毕之后,是需要脱离IDE环境运行的。
有2种办法:
第一,根据AirtestIDE的运行脚本命令跑,如:

# 先使用adb连接设备,否则可能无法启动Airtest脚本
adb connect 127.0.0.1:5037
"D:\ProgramFiles\AirtestIDE-win-1.2.14\AirtestIDE\AirtestIDE" runner "D:\python\helloworld.air"  --device android://127.0.0.1:5037/14a0332c?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MAXTOUCH --log "C:\Users\zhangsan\AppData\Local\Temp\AirtestIDE\scripts\807aacf1256a64b89f3f7b89ae805c43"

第二,部署本地Python环境跑。

# 安装Airtest框架
pip install airtest

# 安装Poco框架;编写了Poco语句就需要安装
pip install pocoui

# 安装airtest-selenium框架;编写了airtest-selenium语句就需要安装
pip install airtest-selenium

# 运行自动化测试脚本
python -m airtest run "D:\python\helloworld.air" --device android://127.0.0.1:5037/127.0.0.1:7555 --log "C:\Users\zhangsan\AppData\Local\Temp\AirtestIDE\scripts\807aacf1256a64b89f3f7b89ae805c43"

详见:如何脱离AirtestIDE跑自动化脚本

【参考】
https://www.jianshu.com/p/3e3ad243f956 Airtest引用其他的.air脚本
https://blog.csdn.net/Py_csdn_/article/details/109023773 【AirTest】引用别的.air脚本中封装好的方法的几种方式
https://blog.csdn.net/laoxi_liu/article/details/104628765 Airtest 常用函数(持续更新)
https://blog.csdn.net/qq_42293487/article/details/102929123 airtest常用按键
https://www.cnblogs.com/songzhenhua/p/15612620.html Airtest API精讲之wait(),exists()
https://blog.csdn.net/George513/article/details/101058574 Airtest-Poco元素定位剖析
https://blog.csdn.net/AirtestProject/article/details/105836667 poco的元素定位搞不定?速来看看这3个选择器
https://blog.csdn.net/qq_48946910/article/details/108640705 airtest有很多同名节点时快速定位到的一个方法
https://blog.csdn.net/AirtestProject/article/details/125999073 Airtest脚本的点击位置与点击偏移
https://cuiqingcai.com/9529.html Airtest 和 Poco 的 API 总结
https://www.cnblogs.com/songzhenhua/p/15970453.html Poco元素定位和脚本编写顺序
https://juejin.cn/post/7028783863102963720 一文打包Airtest干货教程-2021篇

posted @ 2022-08-24 23:32  nuccch  阅读(188)  评论(0编辑  收藏  举报