• 〖Python APP 自动化测试实战篇②〗 - 大话闲扯 APP 自动化工具的演进史


    万叶集
    🎉 隐约雷鸣,阴霾天空。 🎉
    🎉 但盼风雨来,能留你在此。 🎉


    前言
    ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS 赋能的博主 ✌
    🏆 CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 🏆
    📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
    💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
    🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


    专栏系列(点击解锁)学习路线指引知识定位
    🔥Python全栈白皮书🔥 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
    语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
    自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
    自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
    数据库开发实战篇 更新中
    爬虫入门与实战 更新中
    数据分析篇 更新中
    前端入门+flask 全栈篇 更新中
    django+vue全栈篇 更新中
    拓展-人工智能入门 更新中
    网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
    网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
    vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
    shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
    WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
    测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
    测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
    RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
    Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
    MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


    紧接着上一章节,在今天的这一章节我们来具体聊一聊 APP 自动化测试工具的演进史。所以在该章节具体跟大家介绍的其实就是常用的、或者是以前见过的 APP 自动化测试工具都有哪些?以及我们为什么要使用 APPIUM ,它的优势又在哪里。

    🐳 APP 自动化工具

    大概在 2010年 前后,APP自动化测试还只是一个萌芽状态。最早的自动化测试工具其实就是安卓本身自带的测试框架 Instrumentation ,这样的一个测试框架其实是现在也是未来很多测试框架的基础。

    Instrumentation 这个框架其实非常的简陋,底层的支持也不是太好,使用起来不是太方便,同时最大的缺点是不支持跨应用。而且封装也非常的简单,基本上就是直接去调用 安卓的源码包 ;(这种方式让大家写起自动化来非常的难,而且那个时候 selenium 已经普及开来了,大家非常适用这种简单的高封装性的写法),所以 Instrumentation 并没有流行开来,只是在小范围内,没有办法的情况下才会选择使用。


    由于 Instrumentation 封装的不够好,后来就出现了基于 Instrumentation 框架开发的 Robotium ,“Robotium” 对于一些常用的操作进行了一些封装,封装成了我们习惯性使用的自动化指令。

    在后来的使用过程中发现,这个 Robotium 高度封装了关于安卓底层的一部分,而且在当时也有一些像 flash 的类似组件、和IOS系统的设备都没有办法支持。

    所以虽然它火了一段时间,但是仍然逐步的被 APP 自动化领域抛弃掉了。


    接下来,谷歌方面就开源了各种各样的开源组件。第一个给出的就是 UIAutomator ,“UIAutomator” 是现在我们做自动化的一个核心的基础。它提供的这样一套开源框架呢包含了 API 的 JAVA 库,用来创建功能性的UI测试。并且有了一套自己的 APP 测试引擎,能够结合着 Junit 、TestNG来进行一些测试案例的写法。

    但是谷歌维护起来这样一套 UIAutomator 是非常困难的,所以它的社区资源完全已谷歌自己的为主,并不太完善。而且大家使用的程度也不是特别的高,同时受限于当时的安卓版本限制,只对 Java 支持的特别好,对其他语言的支持非常差,所以 UIAutomator 没有火起来。但是它奠定了 自动化测试的核心的一个底层,包括现在使用的 "APPIUM" 的底层其实就是借鉴了 "UIAutomator" 的大部分内容


    随着 UIAutomator 的不太成功,谷歌又推出了一个精简、快速的自动化测试框架 Espressp 。这样一个框架也是开源出来的,非常的小、也非常的轻量级。编写代码起来非常的简单,开始它仅仅是基于 Instrumentation 的高度封装,没有突破 Instrumentation 里面的问题,比如说跨应用等问题都没有解决。


    随着谷歌的这两款工具的使用的减少,行业里开始有一些人开始自己动手做工具。谷歌都没有做好的事情,可能很多人都觉得自己做起来可能也很困难,但实际上呢有一批这样的人算是测试开发领域的领路人,他们做了一套属于自己的一套自动化测试工具。该工具的底层非常高度的借鉴了安卓的UIAutomator ;对于 IOS 的支持,其实是使用了 IOS 自己内部的框架 UIAutomation ;使用了这两套框架的组合,实现了双平台支持的 APPIUM 这样一款工具。这款工具的出现,真的是让大家觉得终于能有一个方式能用一套代码同时支持我们的IOS和安卓。

    同时该工具的写法上抛弃了原有的 UIAutomatorUIAutomation 的写作习惯,开始绑定了 selenium2.0 之后出现的 webdriver 的语法,将这样的语法利用在了我们的安卓移动端上的测试,开发人员就可以使用 webdriver 来兼容任何一个语言。(比如 Java、Python、Ruby…)这些都可以编写自动化脚本,这就是 APPIUM 的优势。

    那么 APPIUM 有没有缺点呢? 其实也是有的,比如说它的封装性非常的强,但是当我们想要对底层进行一些二次开发的时候,它的二次开发没有那么的友好。所以虽然 APPIUM 是开源的,但是很多人基于它做了二次开发但是并不太成功,所以大家在使用上依然没有跳出 APPIUM 给大家设定好的规则。但是这并不能代表这个工具就有很大的缺点,只能说 APPIUM 本身的支持就非常的全面。

    直到现在,虽然 APPIUM 诞生了很多年了,大家仍然依赖、习惯于是用它。


    当然了,并不说 APPIUM 的出现就导致不在有其他的工具诞生了。在这之后出现了一款叫做Calabash 的工具,它也是一个跨平台的 APP 测试框架。它所测试的东西并不像 APPIUM 这样面面俱到,主要是用来测试屏幕截图、手势等一些晓得功能。

    最主要的是该款工具绑定了另外一种设计模式,支持的是一种叫做 Cucumber行为驱动模式 。“行为驱动模式” 其实就是另外一种模式的关键字驱动,只不过呢我们将它的行为取代了关键字而已。本质来说,在自动化测试领域体系里面,它的提升并不是太高。

    同时 Calabash 也有很多自己的缺点,比如说它运行起来非常的慢,就像早期的 APP自动化测试工具一样 ,默认都要先安装 APP 。哪怕是已经安装好了,也会重新安装一遍;在语言上,除了 ruby 之外,对其他的语言支持也不是很友好。这就是 Calsbash 目前最大的问题 。


    目前,在行业里。提到APP自动化测试,大家默认的一个方式就是使用 APPIUM 。所以后续的章节,也是完全基于 APPIUM 来为大家进行的讲解。

    🐳 APPIUM 原理

    见下图:



    实际上大家在后面使用 APPIUM 的时候就会发现调用的速度会很慢,造成这个原因的其实就是上图中的示意。

    我们编写的脚本通过 HTTP 底层的 TCP 链接到 APPIUM 的 Server ,再通过 Server 来确认链接的设备是安卓还是IOS等等等等,同时在回去加载对应的 adb 等非常多的设备管理工具,综合的完成了一套这样的框架来实现脚本的预期结果。


    OK,对于 APP 自动化测试、对于 APPIUM 的一些简单的介绍就见到这里,从下一章节开始,一起来真的使用 APPIUM 这款工具,看看它是不是真的那么的好用。

    拜了个拜…



  • 相关阅读:
    .Net Core&RabbitMQ死信队列
    运维少背锅? 7 种常见监控工具,你是否用过?
    01.高等数学基础
    数据库性能测试-mysql篇
    【HTML】form标签
    如何处理Vue2项目里大规模的数据计算?
    了解RPC、HTTP、TCP
    设计模式——总结
    Part12:Pandas的Merge语法(内含设置行名方法)
    Spring Boot与Reactive MongoDB集成
  • 原文地址:https://blog.csdn.net/weixin_42250835/article/details/125418479