热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Appium跨平台移动自动化工具

什么是Appium?Appium是一款开源测试自动化工具,由SauceLabs开发和支持,支持iOS平台和Android平台上的原生应用

什么是Appium?

Appium 是一款开源测试自动化工具,由 Sauce Labs开发和支持,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。它也是一款跨平台移动自动化工具。它在通过使用 JSONWP协议(WebDriver开发者编写的一种通信机制),使用Selenium WebDriver与iOS和Android本机应用程序进行交互

市场上有许多其他自动化工具可用于自动化操作本机应用程序,如MonkeyTalk,KIF,Calabash和Frank,但大多数这些工具需要使用您的应用程序代码编译额外的agent,以便该工具可以与移动应用程序进行交互。那么问题来了,您需要在提交应用程序之前删除这些自动化agent库,从而保证您所测试的应用程序与您在App Store中提交的应用程序相同,徒增麻烦?

Appium这个由Node.js编写实现的自动化工具是Android iOS 的混合和原生移动应用程序走向自动化的一个关键作用。它的核心原则之一是测试代码可以用任何框架或语言编写,如Ruby on Rails,C#和Java,而无需为自动化去修改应用程序。node.js服务器和Selenium客户端库之间的交互最终与移动应用程序一起工作。而且Appium是开源的,可以在各种设备和模拟器上无缝运行,使其成为移动测试自动化的最佳选择。

 


Appium 体系结构

Appium是一个用node.js编写的HTTP服务器,它为iOSAndroid等不同平台创建和处理多个WebDriver会话。

Appium在设备上启动“测试用例”,该设备生成服务器并从Appium 服务器侦听代理命令。它与Selenium服务器几乎相同,后者从selenium客户端库中感知HTTP请求,并根据平台以不同方式处理这些请求。像iOSAndroid这样的每个供应商都有不同的方式和机制来在设备上运行测试用例,因此Appium会侵入并在从Appium服务器监听命令后运行此测试用例。


Appium如何在iOS中运行


在iOS上,Appium代理命令到在Mac Instruments环境中运行的UIAutomation脚本。 Apple提供了这个名为“instruments”的应用程序,用于执行分析,控制和构建iOS应用程序等许多活动,但它还有一个自动化组件,我们可以在Javascript中编写一些命令,使用UIAutomation API与App UI进行交互。 Appium利用这些相同的库对iOS应用程序进行自动化。

Appium

在上图中,我们可以在iOS自动化的描述中看到Appium的体系结构。如果我们谈论一个命令生命周期,就像Selenium webdriver从(Element.click)这样的代码中选择一个命令,并通过http请求以JSon的形式发送给Appium服务器。 Appium服务器知道像iOS和Android这样的自动化特征,并将此命令发送到Instruments命令服务器,该命令服务器将等待Instruments命令客户端(用node.js编写)来获取它并在iOS中的bootstrap.js中执行它仪器环境。执行该命令后,命令客户端将消息发送回Appium服务器,该服务器在其控制台中记录与该命令相关的所有内容。这个循环一直持续到所有命令执行的时间。


Appium如何在Android中运行


在Android的情况下情况几乎相似,其中Appium代理命令到在设备上运行的UIAutomator测试用例。 UIAutomator是Android的原生UI自动化框架,支持从命令行直接将junit测试用例运行到设备中。它使用java作为编程语言,但Appium将其解析成任何WebDriver支持的语言运行。

Appium

在上图中我们可以看到,这里我们用Bootstrap.jar代替bootstrap.js,它代表了在java中编译时的测试用例。一旦它启动它就会产生一个TCP服务器。这里TCP服务器驻留在设备内部,客户端处于Appium进程中,这与iOS中的方式完全相反。

 


Appium的优点和缺点:


优点:


  • Appium的美妙之在于,所有复杂性都在Appium服务器的引擎盖下,对于自动化开发人员而言,编程语言和整个体验将保持相同,无论他自动化的平台(iOS或Android)如何。
  • Appium的其他好处是它打开了跨平台移动测试的大门,这意味着相同的测试可以在多个平台上运行。
  • 与其他工具不同,Appium不要求您在应用程序中包含一些额外的代理,以使其自动化。它相信我们将在应用程序商店中测试相同应用程序的理念。
  • 它由Sauce Labs开发和支持,并且在WebDriver社区中用于移动自动化的速度非常快。
  • 它可以自动化Web,HybridNative 移动应用程序。

缺点:


  •  
  • 扩展是持续集成的重要考虑因素,而Appium是实现这一期望的重要工具。 原因是技术限制,在iOS中我们只能在每台Mac OS上运行一个实例,因此我们只能在每一台mac机器上运行我们的iOS脚本。 因此,如果我们想要同时在多个iOS设备上运行我们的测试,那么需要安排相同数量的Mac机器,这将会代价很大。 但是,如果我们在Sauce Lab的移动云中执行我们的脚本,目前支持在多个iOS模拟器上同时运行脚本,则可以解决此限制。
    Appium使用UIAutomator对于Android的自动化,只支持Android的SDK平台,API 16或更高版本,以便支持旧的API,他们使用另一个名为开源库Selendroid。所以我不会说它是一个限制,但它绝对是配置方面的开销。

在Mac上配置Appium:

在Mac 上运行Appium需要以下配置:


  • 首先,我们需要从此链接下载适用于Mac 的Appium应用程序  。下载后,您需要将此应用程序移动到您的应用程序文件夹,然后您可以从Mac Launchpad启动它。
  • 由于Appium在内部使用node.js所以我们还需要在mac机器上安装node,可以从http://nodejs.org/下载   ,它提供一个node-v0.10.xx.pkg文件供您安装。
  • 我们还需要确保使用的是  Mac OSX 10.7+
  • 应在mac机器上安装XCode 4.5或更高版本以及iPhone模拟器SDK和命令行工具。

推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文详细介绍了解决全栈跨域问题的方法及步骤,包括添加权限、设置Access-Control-Allow-Origin、白名单等。通过这些操作,可以实现在不同服务器上的数据访问,并解决后台报错问题。同时,还提供了解决second页面访问数据的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
author-avatar
伊那里
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有