一、Airtest的简介

  Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
  另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。

二、关于自动化测试

  概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
  意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。

三、市面上常见的UI自动化测试工具以及优缺点

 
image.png

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

 
image.png

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

 
image.png

所以其实基于图像识别的Airtest更适合用于游戏测试多一点。

四、环境的搭建

1.AirtestIDE的下载
AirtestIDE已经帮你集成了所有的环境,自带录制脚本栏,自动生成脚本,自带编辑器还自带模拟器,有了一个AirtestIDE就可以轻松简单的录制脚本了。下载地址是Airtest的官网:

http://airtest.netease.com/

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,左边就会产生每张被截取的控件的样式。

之后机器就会在整个界面中取一张截屏,然后在截屏中寻找我们截取的那个部分,然后再定位到图片的位置,对图片进行点击的操作,从而达到通过图像识别进行测试的自动化,当然基于图像识别的方式比较难进行输入值的操作,比较适合一些重复繁琐的按钮点击事件。意思就是说这种通过截取图像再的方式并不是很适合用来做登录类的需要用户输入数据的东西。

 
图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(“要输入的内容”)来自动进行输入操作,是不是很简单省事?

 
图2

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

 
图3

总结

  Airtest操作比较简单,基本上不涉及到代码,所以非常适合刚入门没什么测试经验的人利用这个工具做UI自动化测试,同时Airetest又提供了开源的API,让资深测试工程师可以基于Airtest的框架上再做高级的定制化扩展功能。
  如果说这个软件有存在不足的地方,个人认为就是不支持断点续传,如果测试中出现了错误以后整个测试就停下来并且要手动从头开始,这里可以进行二次开发,第一种让某个错误出现的时候选择自动重新跑脚本,这种场景适用于前面的按钮跟后面的按钮不在同一个页面上,没有点击到前面的按钮,后面的按钮也不会出现,第二种将错误记录,再跑接下来的脚本,这种场景适用于两个按钮都在同一级页面,相互间影响不大可以先触发后面的按钮进行测试。

关于Airtest的使用探索的更多相关文章

  1. Airtest Project的探索和使用

    Airtest使用参考博文: https://testerhome.com/topics/12391 1. 安装Python 3 2. 安装pip: 安装方法参考另外一篇随笔 pip3部署: C:\U ...

  2. 【爬虫集合】Python爬虫

    一.爬虫学习教程 1. https://www.jianshu.com/u/c32d557edfa3 2. WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个 ...

  3. Airtest安装与简介

    一:简介 什么是Airtest 网易的airtest其实是个测试套件,由Airtest框架.poco框架.airtestIDE 组成. Airtest框架 基于图像识别的自动化测试框架,是网易自己团队 ...

  4. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  5. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  6. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  7. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  8. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  9. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

随机推荐

  1. WPF实现分页控件

    页面代码如下: <UserControl x:Class="Music163.DataGridPaging" xmlns="http://schemas.micro ...

  2. laravel的测试工具debug安装:

    在项目根目录执行: composer require barryvdh/laravel-debugbar --dev

  3. spark streamingcontext

    一个StreamingContext定义之后,必须做以下几件事情:1.通过创建输入DStream来创建输入数据源.2.通过对DStream定义transformation和output算子操作,来定义 ...

  4. Linux的常识

    用到$是环境变量查询的开头 # echo $LANG查看编码 ls -l 是查看本地的所有文件的目录 以list的形式罗列出来 cd .. 上一层的目录 查看当前目录下有哪些文件 ll 等于ls -l ...

  5. javascript中的自定义属性

    标签的自定义属性: 在开发中,有时需要在标签上添加一些自定义属性用来存储数据或状态. 设置了自定义属性的标签,就是在这个标签上添加了这个属性,浏览器中的html结构中可以看到. 使用点语法(如oWra ...

  6. Data assimilation

    REF: https://en.wikipedia.org/wiki/Data_assimilation Data assimilation is the process by which obser ...

  7. 请解释ASP.NET 中的web 页面与其隐藏类之间的关系?

    一个ASP.NET 页面一般都对应一个隐藏类,一般都在ASP.NET 页面的声明中指定了隐藏类例如一个页面 Tst1.aspx 的页面声明如下 <%@ Page language="c ...

  8. JAVA面向对象之重载与重写

    重写:子类对父类方法的重新编写 返回值不变,形参不变 不能抛出新的或者范围更广的异常 class Animal{ public void move(){ System.out.println(&quo ...

  9. 【整理】QT .pro文件中的变量说明

    注释 以"#"开始的行,直到结束 模板变量 告诉qmake生成哪种makefile TEMPLATE = app 其中 app - 表示该工程建立一个应用程序的makefile.这 ...

  10. Problem B: STL——集合运算

    Description 集合的运算就是用给定的集合去指定新的集合.设A和B是集合,则它们的并差交补集分别定义如下: A∪B={x|x∈A∨x∈B} A∩B={x|x∈A∧x∈B} A-B={x|x∈A ...