关于Airtest的使用探索
一、Airtest的简介
Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。
二、关于自动化测试
概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。
三、市面上常见的UI自动化测试工具以及优缺点

以上主流工具的优点跟缺点:

相较于以上工具来说,Airtest有以下优点和缺点:

所以其实基于图像识别的Airtest更适合用于游戏测试多一点。
四、环境的搭建
1.AirtestIDE的下载
AirtestIDE已经帮你集成了所有的环境,自带录制脚本栏,自动生成脚本,自带编辑器还自带模拟器,有了一个AirtestIDE就可以轻松简单的录制脚本了。下载地址是Airtest的官网:
AirtestIDE的使用教程跟文档也在下面的连接中:
http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html
如果你想要利用Airtest的API,自己拓展更多的高级功能的话,可以先下载airtest的python第三方依赖库:
$brew install python3.6.4
#下载python3
$pip install Airtest
#下载Airtest python第三方依赖库
$pip install poco
#下载Airtest提供的Android app ui测试库pocoui
$brew cask install android-sdk
#安装Android-sdk,详细的配置教程网上有,这里不详细说了。
然后再下载一个Python的编辑器来编辑代码,个人推荐使用的是pycharm。接下来就是使用官方提供的启动demo代码:
from airtest.core.api import *
# 通过ADB连接本地Android设备
connect_device("Android:///")
#安装待测软件apk,路径信息。
install("path/to/your/apk")
#开始运行app
start_app("com.pingan.certicationApp")
#点击某个图片,Airtest中基于图像识别语法,图片自己提供。
touch(Template("image_of_a_button.png"))
#滑动语音,开头图片跟结尾图片
swipe(Template("slide_start.png"), Template("slide_end.png"))
#添加断言的图片
assert_exists(Template("success.png"))
#点击Android上的返回键
#keyevent("BACK")
#点击Android上的Home键返回
#home()
#uninstall("package_name_of_your_apk")
以上已经添加了每一句作用的注释,小伙伴们可以动手试一下将程序跑起来,当然如果说易操作性还是AirtestIDE比较容易上手一点。
五、AirtestIDE的真实场景运用
以上介绍了那么多的就来讲一下实际操作,以平安的智能双录app为例子,首先我们先来看一下用例步骤:
- 1、点击双录列表待上传页面的重新录制按钮
- 2、进入录制后点击开始录制按钮
- 3、点击录制完成
- 4、点击确认完成
5、在弹框中点击“确认”
首先连接设备并进行录制:
image
然后我们用IDE开始录制脚本,先截取每一个按钮的图片,进行touch操作,如图1,左边就会产生每张被截取的控件的样式。
之后机器就会在整个界面中取一张截屏,然后在截屏中寻找我们截取的那个部分,然后再定位到图片的位置,对图片进行点击的操作,从而达到通过图像识别进行测试的自动化,当然基于图像识别的方式比较难进行输入值的操作,比较适合一些重复繁琐的按钮点击事件。意思就是说这种通过截取图像再的方式并不是很适合用来做登录类的需要用户输入数据的东西。

那么问题来了,怎么样才能够让Airtest也精准定位到输入框,从而完成自动输入信息类型的自动化测试呢?其实我们别忘了Airtest还有基于poco这个UI控件搜索框架,所以如果是Android类的app,还是比较适合用poco来定位控件的位置,从而实现自动化,下面有一个智能双录软件新建保单的测试用例:
- 1、点击新建双录按钮进入新建双录页面
- 2、随机输入000开头的14位保单号
- 3、输入投保人姓名
- 4、输入投保人证件类型
- 5、输入投保人证件号
- 6、输入保险产品
- 7、输入被保人幸免
- 8、选择销售渠道、产品类型、缴费频次
- 9、填写缴费期、每期保费、保险期间
- 10、勾选双录材料
如图2所示,只要点击AirtestIDE左上角,Android旁边的录制按钮,然后只要点击右边模拟器的响应的控件,就会帮你自动定位那个控件的位置,然后再选择动作事件,例如:点击chlick(),滑动swipe()之类的操作,如果要输入字符的话,可以通过先选中需要输入内容的输入框,然后再用test(“要输入的内容”)来自动进行输入操作,是不是很简单省事?

除了以上这些,我们还可以往脚本里面加入断言,然后利用Airtest一键生成测试报告,如图3所示,这种报告不仅可以让你快速了解到你测试的哪个步骤出错了,而且同时也便于判定UI有没有展示异常,但是Airtest有一个缺陷,就是只要某张图片识别不出来,整个脚本录制进程就会停止,后面的控件就不会再去识别,报告也只会停留在失败的那一步,生成报告可以点报告按钮或者ctrl+l,报告以网页的形式呈现,如下图:

总结
Airtest操作比较简单,基本上不涉及到代码,所以非常适合刚入门没什么测试经验的人利用这个工具做UI自动化测试,同时Airetest又提供了开源的API,让资深测试工程师可以基于Airtest的框架上再做高级的定制化扩展功能。
如果说这个软件有存在不足的地方,个人认为就是不支持断点续传,如果测试中出现了错误以后整个测试就停下来并且要手动从头开始,这里可以进行二次开发,第一种让某个错误出现的时候选择自动重新跑脚本,这种场景适用于前面的按钮跟后面的按钮不在同一个页面上,没有点击到前面的按钮,后面的按钮也不会出现,第二种将错误记录,再跑接下来的脚本,这种场景适用于两个按钮都在同一级页面,相互间影响不大可以先触发后面的按钮进行测试。
关于Airtest的使用探索的更多相关文章
- Airtest Project的探索和使用
Airtest使用参考博文: https://testerhome.com/topics/12391 1. 安装Python 3 2. 安装pip: 安装方法参考另外一篇随笔 pip3部署: C:\U ...
- 【爬虫集合】Python爬虫
一.爬虫学习教程 1. https://www.jianshu.com/u/c32d557edfa3 2. WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个 ...
- Airtest安装与简介
一:简介 什么是Airtest 网易的airtest其实是个测试套件,由Airtest框架.poco框架.airtestIDE 组成. Airtest框架 基于图像识别的自动化测试框架,是网易自己团队 ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
随机推荐
- 软件测试第一次试验JUnit
一.Junit, hamcrest以及eclemma的安装 对于Junit和hamcrest的安装,我并没有从下载Junit和hamcrest相关的jar包然后通过build path导入到项目中,而 ...
- Android studio报Error:(26, 13)-v7:27.错误的解决方法
1.报错图片 2.上图我画了红圈很明显就提示报错方向就是项目文件:build.gradle 3.解决方法如下 添加此方法到项目构建.gradle文件中: repositories { maven ...
- Mysql 了解changeBuffer 与 purge 调优
需要删除.新增记录或更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB 会将这些更新操作缓存在 change buffer中, ...
- Oracle 11g 测试ogg中断之后,重新同步操作
测试ogg中断之后,重新同步操作 2018-06-07 17:11 779 1 原创 GoldenGate 本文链接:https://www.cndba.cn/leo1990/article/2839 ...
- Python语言:Day11练习题
24.实现一个整数加法计算器:如:content=input('请输入内容:')#如:5+9或5+ 9或5 + 9 content = input("请输入需要计算的:") #如: ...
- MFC窗口风格 WS_style/WS_EX_style
窗口风格(Window style) WS_BORDER 有边框窗口 WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用.指示窗口包含标题要部分 ...
- *args和**kwargs的区别
*args和**kwargs表示可变长度的参数. *args是元组类型: **kwargs是字典类型: 注意:arg.*args.**kwargs三个参数的位置必须是固定的,否则会报错.
- 小飞侠带你精通Python网络编程系列04-Python内置的数据类型
在Python中有以下几种标准的内置数据类型: 1.NoneType: The Null object--空对象2.Numerics(数值): int-整数, long-长整数, float-浮点数, ...
- android LogConfigurator
android LogConfigurator 此为第三方的 Log日志
- web网页错误代码的含义
web网页错误代码的含义 一.1xx 表示临时响应并需要请求者继续进行操作的状态码,例如: 100--继续:101--切换协议 二.2xx 表示服务器成功的处理了请求的状态码,例如: 200--客户端 ...
