声明:原文出自“前端之巅”微信公众号“爱奇艺基于AI的移动端自动化测试框架的设计”一文,作者:何梁伟,爱奇艺Android架构师。文章提供了一种基于AI算法的自动化测试框架AIon,该框架并未开源,目前搜索不到相关资料,但从作者的设计思路上很受启发。

理想种的移动UI自动化框架:

  • 易于开发和维护

  • 稳定性

  • 执行效率

  • 跨平台

  • 跨应用

  • 支持Hybrid(混合应用)

传统的UI自动化框架(UIAutomator、Espresso、appium等),或多或少在这些方法做的不够完美。

那么理想中的框架应该是什么样的?

模拟用户的操作,用户在操作的时候是不需要知道控件的属性(ID、name)的,它应该是一种所见即所得的操作。

所以,像Sikuli 、AirTest这样的基于图片识别技术的测试框架就很好。

但是,它们也有一些不足:

  • 准确率不足

  • 没有层次结构

  • 代码稳定性差

  • 代码可维护性差

如果,测试脚本可以变成这样:

这个样的脚本表达接近我们的自然语言。比如,点击标签上的会员按钮,就变成 find('tab').find('会员'),代码的维护性也会变得很好。

要实现这样的框架需要哪些技术:

  • 图像切割

  • 图像分类识别

  • OCR文字识别

  • 图像相似度匹配

  • 像素点操作

图像切割:可以把一整张图片切割出不同的块,比如一张App的截屏,可以切割成导航栏、视频封面列表、搜索框等不同的块。

图像分类识别:对上面切割的块进行分类,需要图像分类的能力。

OCR文字识别:依赖图像 OCR 的识别能力,知道对应的视图里面有哪些文字。

图像相似度匹配能力:这一点传统的图像处理库就可以实现。比如Python的pillow库。

像素点的操作:可以依赖传统的框架,比如通过坐标完成操作,也可以使用机械臂来完成像素点的操作。

深度学习带来的机会

在深度学习以前,图像分类领域的准确率一定在75%以下,引入深度学习使准确率提高到98%、99%。有文章说准确率达到95%说明已经超过人类了,这是一个相当高的水平。

识别率在逐年提高。

ORC的能力主要体现在:完整准确率和文字准确率。

完整的准确率是指,在一个截图里面,会有一些标题和词组,如果标题里面有一个字出现了错误,就认为这个标题的识别是错误的,通过这种方式,准确率能够达到93%。

文字的准确率,是将一张截图分割成多个块,然后识别出每个块上的文字。因为已经分割了块,所以识别率可以达到98%。

终于介绍到AIon框架了。

有了上面这些技术做为基础以后,就可以尝试AIon框架实现了。

这中间还介绍了UI2Code 、pix2code两个“类似”框架的。它们是将截图生成用户界面代码,感兴趣可以百度了解。

这里直接介绍Alon的工作方法。敲黑板!这里考试重点。

AIon 会把一个截图切成几块:tab、导航、状态栏等,然后用深度学习图像分类,对每一块进行分类识别,识别完了以后,就会把对应块里的子元素提取出来,再用一些AI的技术,提取里面的内容,把它填充到子元素的属性里面去,最后就会得到二级视图树的结构,最后,就可以去做对应的点击操作了。

AIon的处理过程:

比如要实现一条测试用例,

首先截屏,对它进行场景判断,场景判断会应用到一些AI分类识别,识别出当前界面有没有弹出对话,或者它是否是登陆页的场景识别。场景识别完了以后,就会进行传统的图像切割,图像切割完了以后,进行布局分类,布局分类也会应用到一些AI的技术,分类完了以后,进行子元素的提取,对这个子元素进行填充,填充会应用到一些AI的技术。

最后,当视图树构建完了之后,匹配之前写的测试用例里面的条件进行匹配,匹配之后,执行测试用例,这就是整个AIon的核心流程。

由于考虑到之前的一些测试用例,还有一些传统的测试框架写的测试用例,本身还做了对传统测试框架的融合。

AIon的处理过程中涉及到一些技术问题这里就省略了,通篇阅读下来有点像论文。强烈建议阅读原文,我这里只是简化了对原文的解读。

从中get到了一些基于AI实现自动化框架的思路。未来的自动化测试肯定会越来越使用更简单,功能更强大。要么去实现AI自动化框架,要么被AI自动化框架淘汰!你选吧!

阅读原文

AI移动自动化测试框架设计(解读)的更多相关文章

  1. Python3简易接口自动化测试框架设计与实现(中)

    目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...

  2. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  3. python3+Robot Framework+PyCharm自动化测试框架设计

    关于自动化测试框架的设计,笔者在前面的随笔里面有介绍和总结,这里结合实际的项目例子做个demo,环境部署参考笔者的的随笔<python3+Robot Framework+PyCharm环境部署及 ...

  4. python 做接口自动化测试框架设计

    1,明确什么叫自动化测试,什么叫接口自动化测试,如何设计接口测试用例,已登录为例 自动化测试:解放人力来自动完成规定的测试. 自动化测试分层模型:UI层,不论WEB端还是移动端,都是基于页面元素的识别 ...

  5. Python3简易接口自动化测试框架设计与实现(上)

    目录 1.开发环境 2.用到的模块 3.框架设计 3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 接口开发请参考:使用Django开发简单接口:文章增删改查 1.开发环境 操作系统: ...

  6. Java+Selenium3自动化测试框架设计系列--href="javascript:void(0)"如何获得元素定位

    经过前面两篇文章的铺 垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题.我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的 tab窗口打开页面B,这个时候,你 ...

  7. http接口测试—自动化测试框架设计

    转载:https://my.oschina.net/hellotest/blog/499719 一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值(Js ...

  8. demo的自动化测试框架设计

    [准备环境] pycharm [思路] Python+request+unittest+HTMLTestRunner 框架 框架的可读性需要强 公共方法提取 可变参数需要提取放入配置文件 做好日志记录 ...

  9. 从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

    用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据 把请求数据都放在一个json文件中 取出login的内容: import json fp = open('G:/un ...

随机推荐

  1. Quartz+ssm注解方式的最最最最简单使用

    Maven配置 <!-- quartz监控 --> <dependency> <groupId>org.quartz-scheduler</groupId&g ...

  2. Java分布式锁,搞懂分布式锁实现看这篇文章就对了

    随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理机每秒钟所执行的指令还多.如果你愿意付出两倍的价钱,将得到同样的CPU,但它却以更 ...

  3. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. 在vue项目中添加全局提示框

    1.写一个提示框组件:msg.vue (注明:这里用两个div的原因是成功和失败的提示不能用同一个div,因为他们可能紧接着出现,所以不能从始至终只有一个提示框在工作) 2.写一个调用此组建的js : ...

  5. 一套代码小程序&Web&Native运行的探索01

    前言 前面我们对微信小程序进行了研究:[微信小程序项目实践总结]30分钟从陌生到熟悉 并且用小程序翻写了之前一个demo:[组件化开发]前端进阶篇之如何编写可维护可升级的代码 之前一直在跟业务方打交道 ...

  6. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用它的规范标准来制造应用服务器而 ...

  7. AspNetCoreapi 使用 Docker + Centos 7部署

    好久没有更新文章了,前段时间写了一系列的文章放到桌面了,想着修修改改,后来系统中勒索病毒了还被公司网络安全的抓到是我电脑,后来装系统文章给装丢了.然后好长一段时间没有写了. 今天记录一下AspNetC ...

  8. sql:常用函数

    1.验证是否是null,是则替换ISNULL(Weight, 50) SELECT AVG(ISNULL(Weight, 50))FROM Production.Product; 2.连接多个字符串  ...

  9. 个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解

    一.依赖倒置(Dependency Inversion Principle) 依赖倒置是面向对象设计领域的一种软件设计原则.(其他的设计原则还有:单一职责原则.开放封闭原则.里式替换原则.接口分离原则 ...

  10. 如何在Eclipse中彻底修改一个项目名称

    在实际工作中,有时候为了赶时间,往往通过复制项目得到一个成型的框架.那么怎么才可以彻底修改项目名称呢? 1.web.xml 2.工作空间中找到当前项目下.project文件 3.工作空间中找到当前项目 ...