一、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. 跟随我在oracle学习php(17)

    通用设定形式 定义一个字段的时候的类型的写法. 比如: create  table  tab1  (f1  数据类型 ); 数据类型: 类型名[(长度n)]  [unsigned]  [zerofil ...

  2. Apache Spark 3.0 将内置支持 GPU 调度

    如今大数据和机器学习已经有了很大的结合,在机器学习里面,因为计算迭代的时间可能会很长,开发人员一般会选择使用 GPU.FPGA 或 TPU 来加速计算.在 Apache Hadoop 3.1 版本里面 ...

  3. Freeswitch 各版本一键安装脚本 Freeswitch 快速安装 G729编解码库

    最近有时间整理,写了freeswitch的一键安装包分享一下,里面带有 mysql=0 是否选择安装mysql. 其他提示:脚本里面集成了安装g729脚本,支持录音.转码的bcg729脚本. 1.下载 ...

  4. spring中的AOP实验(二)

    软件151  王帅 1.目标对象的接口:IStudent.java  package  com.dragon.study;   public   interface  IStudent  {      ...

  5. 设计模式-builder(构造器模式)

    好处: 多个属性时,可以清楚明了知道属性, 重叠构造起器的安全性和JavaBeans模式的可读性 只需要制定需要建造的类型就可以得到他们 实例: public class NutritionFacts ...

  6. 给django视图类添加装饰器

    要将login_required装饰到view class的dispatch方法上, 因为dispatch方法为类方法,不是单个的函数,所以需要将装饰函数的装饰器 login_required转化为装 ...

  7. Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt

    高通相关网址:Createpoint: https://createpoint.qti.qualcomm.com(可下载文档,Release Note等)Chipcode: https://chipc ...

  8. static(静态)关键字

    class Person{String name; //成员变量,实例变量(实例中的变量) //共享数据出现在对象之前static String country="cn"; //对 ...

  9. linux - man 提示:No entry for tty in section 4 of the manual

    在使用man手册时,出现空章节的情况: 如: 原因:在CentOS6.5安装时,采用了minimal方式安装,许多包都没有安装上,man手册的man-pages包也没有安装 解决方案:安装man-pa ...

  10. Jest 学习笔记(一)之matchers

    Jest官网地址 Jest是专门被facebook用于测试包括React应用在内的所有javascript代码,Jest旨在提供一个综合的零计算的测试体验. 因为没有找到文档,基于我个人的经验,Jes ...