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. [转帖]AMD Zen CPU 架构以及不同CPU性能大PK

    https://plantegg.github.io/2021/08/13/AMD_Zen_CPU%E6%9E%B6%E6%9E%84/ 前言 本文先介绍AMD Zen 架构,结合前一篇文章<C ...

  2. [转帖]Pepper-Box - Kafka Load Generator

    https://github.com/GSLabDev/pepper-box Pepper-Box is kafka load generator plugin for jmeter. It allo ...

  3. [转帖]CoreDump设置方式

    https://www.jianshu.com/p/f5c3134072d2 本文讲述利用coredump调试时,对coredump信息相关的设置方式. 设置core文件大小 列出所有资源的限制 #u ...

  4. 【转帖】Dockerfile文件指令介绍

    https://blog.whsir.com/post-5327.html Dockerfile其实就是一个文本文件,这个文本文件名称叫Dockerfile,里面包含了一些指令(可以理解成多个指令集合 ...

  5. [转帖]Linux CPU频率控制

    1.       概述 Linux 内部共有五种对频率的管理策略 userspace , conservative , ondemand , powersave  和  performance. l  ...

  6. [转帖]Ubuntu Server安装图形界面

    最早接触到的Linux系统是Ubuntu 10.04,当时在自己的一台Win7笔记本电脑上安装的Win/Ubuntu双系统,Ubuntu简洁的操作界面给我留下了深刻的印象. 后来开始做一些服务器开发, ...

  7. Redis IO多线程的简要测试结果

    Redis IO多线程的简要测试结果 摘要 最近想简单确认一下IO多线程的对吞吐量的提升情况. 正好手头有鲲鹏的机器, 所以想直接进行一下验证 顺便用一下4216 进行一下对比. 发现 在CPU核心比 ...

  8. 一次典型的Memroy Leak的跟踪学习过程

    背景 周四时某项目在QQ群里说自己的系统出现了CPU占用较高的情况. TOP 查看发现大部分占用CPU的都是 JAVA核心进城后附近的进程. 所以初步怀疑 是出现了FullGC的问题. 然后群里反馈了 ...

  9. 【代码分享】使用 terraform, 在 ZeroSSL 上申请托管在 cloudflare 上的域名对应的证书

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:<使用 terraform, 在 Let' ...

  10. python中可变参数与装饰器的例子

    python的可变参数 方法定义 #*args是可以传list类型的可变参数,**kwargs是可以传dict的可变参数 def wrapper(*args, **kwargs): 使用示例 def ...