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启动编辑器。

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

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



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



第四步:开始编写Airtest自动化测试代码。实际上,借助于AirtestIDE编辑器可以直接在通过“Airtest辅助窗”面板中的按钮生成代码。

以打开“设置”APP为例,在“Airtest辅助窗”面板中点击“touch”图标,此时移动光标到右侧的“设备窗”面板中拖动鼠标选取“设置”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篇

AirtestProject浅尝辄止的更多相关文章

  1. 浅尝辄止——在C++中调用C#的回调函数——COM方式

    这种方式比较简单,给大家分享一下,同时讲一下SafeArray内定义结构体的方法 1. 需求描述 需求是这样的,C++代码和C#代码相互通信(C++一般做服务,C#做客户端),C++一侧准备好数据,然 ...

  2. 浅尝辄止——使用ActiveX装载WPF控件

    1 引言 使用VC编写的容器类编辑器,很多都可以挂接ActiveX控件,因为基于COM的ActiveX控件不仅封装性不错,还可以显示一些不错的界面图元. 但是随着技术不断的进步,已被抛弃的Active ...

  3. WPF简单布局 浅尝辄止

            WPF的窗口只能包含一个元素,为了在WPF窗口中放置多个元素并创建更实用的用户界面,需要在窗口上放置一个容器,然后在容器中放置其它元素. 注意:造成这一限制的原因是window类继承自 ...

  4. 浅尝辄止WPF自定义用户控件(实现颜色调制器)

    主要利用用户控件实现一个自定义的颜色调制控件,实现一个小小的功能,具体实现界面如下. 首先自己新建一个wpf的用户控件类,我就放在我的wpf项目的一个文件夹下面,因为是一个很小的东西,所以就没有用mv ...

  5. JSON必知必会,浅尝辄止的整理

    在使用JSON时常见的安全漏洞通常发生在JavaScript从服务器获取到一段JSON字符串并将其转化为JavaScript对象时, 在定位JSON安全问题时,应该记住三件事情: 1.不要使用顶级数组 ...

  6. DM浅尝辄止

    都是大佬的笔记啊啊啊啊 dialog management 对话状态维护(dialog state tracking, DST) 生成系统决策(dialog policy) 系统行为(dialog a ...

  7. 浅尝辄止之MongoDB

    1 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储 解决方案.MongoDB将数据存储为一个文档,数据结构由键 ...

  8. SQL注入的浅尝辄止

    简单的说,SQL注入就是通过在前端页面输入SQL语句,导致系统暴露异常信息在前端页面显示,非法者通过这些异常信息获取数据库的相干信息,为攻击系统做准备.

  9. Metatable In Lua 浅尝辄止

    http://www.cnblogs.com/simonw/archive/2007/01/17/622032.html 什么是Metatable Lua中Metatable这个概念, 国内将他翻译为 ...

  10. 【狼窝乀野狼】Parallel浅尝辄止

    前段时间看到园子里面有同学在用Parallel进行批量插入数据库.后面也有很多同学针对这一事件给出了自己的看法和见解.我在这里不评论内容的好坏,至少能将自己东西总结分享这个是要靠勇气和毅力. 闲话少说 ...

随机推荐

  1. [转帖]Linux中的inode到底是什么

    https://www.jianshu.com/p/6aa4d7ef17de inode 是什么? 要了解 Linux 操作系统上的 inode 前,我们先来说说 Linux操作系统上的文件.对于 L ...

  2. [转帖]华为FusionSphere虚拟化解决方案介绍

    https://huaweicloud.csdn.net/63566589d3efff3090b5d243.html?spm=1001.2101.3001.6650.2&utm_medium= ...

  3. [转帖]Full GC (Ergonomics) 产生的原因

    发生Full GC,有很多种原因,不仅仅是只有Allocation Failure. 还有以下这么多: #include "precompiled.hpp" #include &q ...

  4. [转帖]Linux 中unzip解压时中文乱码的解决办法

    https://www.yii666.com/blog/163883.html Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如"资料.z ...

  5. [转帖]Zen4架构+5nm制程+96核心 第四代AMD EPYC处理器强势来袭

    https://new.qq.com/rain/a/20221111A098QE00   不得不承认,技术的持续突破和迭代,使得AMD处理器在近年来得到了"喷气机式"的增长,无论是 ...

  6. pytest-xdist分布式

    使用pytest框架运行每条case的时候,都是上一条运行结束才会运行下一条,要是有成千上百条case 且每条运行2s那就是2*总条数,会浪费大量的时间和人力.为了节约时间和人力成本,pytest提供 ...

  7. 使用Ant Design Vue的select搜索框出现的问题

    Select 选择器进行搜索 <template> <div> <a-form-item label="分类:"> <a-select p ...

  8. elementUI日期选择器,对日期格式进行处理

    使用elementUI日期选择器中,获取不同格式的时间 <el-form-item label="归零时间:" prop="zeroing"> &l ...

  9. RabbitMQ集成系统文章01---ABP VNext 分布式事务Event Bus 集成RabbitMQ

    1.在两个应用中都配置好要连接的RabbitMQ "RabbitMQ": { "Connections": { "Default": { & ...

  10. Python笔记四之协程

    本文首发于公众号:Hunter后端 原文链接:Python笔记四之协程 协程是一种运行在单线程下的并发编程模型,它的特点是能够在一个线程内实现多个任务的并发操作,通过在执行任务时主动让出执行权,让其他 ...