移动测试
文章平均质量分 98
将学习,实践,和研究移动平台测试自动化技术的点滴经验记录下来,以便后来人参考。
天地会珠海分舵
互联网老兵,全栈小学生
展开
-
移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
根据前一篇文章《移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇》所述,因为Appium和MonkeyRunner有一个共同点--代码控制流程都是在客户端实现的。所以要把MonkeyRunner在PC端实现的图片比对和获取子图功能移植到同样是在PC端运行的Appium是很容易的事情,但是对于在服务器端运行的Robotium和UiAutomator就是另外一回事了。因为原创 2014-11-12 09:58:34 · 5785 阅读 · 4 评论 -
Robotium源码分析之运行原理
从上一章《Robotium源码分析之Instrumentation进阶》中我们了解到了Robotium所基于的Instrumentation的一些进阶基础,比如它注入事件的原理等,但Robotium作为一个测试框架,其功能远不止于只是方便我们注入事件,其应该还包含其他高级的功能,参照我们前面其他框架如MonkeyRunner,UiAutomator和Appium的源码分析,我们知道一个移动平台自动原创 2014-11-12 09:17:54 · 5166 阅读 · 0 评论 -
Robotium源码分析之Instrumentation进阶
在分析Robotium的运行原理之前,我们有必要先搞清楚Instrumentation的一些相关知识点,因为Robotium就是基于Instrumentation而开发出来的一套自动化测试框架。鉴于之前本人已经转载和编写了Instrumentation的一些文章,所以建议大家如果没有看过的还是翻看下先对Instrumentation有个基本的理解。然后带着疑问再来看这篇文章看是否能帮上自己。既原创 2014-11-11 13:53:37 · 11385 阅读 · 4 评论 -
移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
如果你的目标测试app有很多imageview组成的话,这个时候monkeyrunner的截图比较功能就体现出来了。而其他几个流行的框架如Robotium,UIAutomator以及Appium都提供了截图,但少了两个功能:获取子图图片比较既然Google开发的MonkeyRunner能盛行这么久,且它体功能的结果验证功能只有截屏比较,那么必然有它的道理,有它存在的价值,所以我们很有必原创 2014-11-06 13:28:19 · 6877 阅读 · 4 评论 -
Appium Server源码分析之作为Bootstrap客户端
Appium Server拥有两个主要的功能:它是个http服务器,它专门接收从客户端通过基于http的REST协议发送过来的命令他是bootstrap客户端:它接收到客户端的命令后,需要想办法把这些命令发送给目标安卓机器的bootstrap来驱动uiatuomator来做事情通过上一篇文章《Appium Server 源码分析之启动运行Express http服务器》原创 2014-11-04 13:23:17 · 6048 阅读 · 1 评论 -
Appium Server 源码分析之启动运行Express http服务器
通过上一个系列Appium Android Bootstrap源码分析我们了解到了appium在安卓目标机器上是如何通过bootstrap这个服务来接收appium从pc端发送过来的命令,并最终使用uiautomator框架进行处理的。大家还没有这方面的背景知识的话建议先去看一下,以下列出来方便大家参考:《Appium Android Bootstrap源码分析之简介》《Appiu原创 2014-11-02 15:25:45 · 5110 阅读 · 2 评论 -
Appium Android Bootstrap源码分析之启动运行
通过前面的两篇文章《Appium Android Bootstrap源码分析之控件AndroidElement》和《Appium Android Bootstrap源码分析之命令解析执行》我们了解到了Appium从pc端发送过来的命令是如何定位到命令相关的控件以及如何解析执行该命令。那么我们剩下的问题就是bootstrap是怎么启动运行的,我们会通过本篇文章的分析来阐述这个问题,以及把之前学习原创 2014-11-01 10:31:27 · 5272 阅读 · 2 评论 -
Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章《Appium Android Bootstrap源码分析之控件AndroidElement》我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在bootstrap中是以AndroidElement对象的方式呈现出来的,并且该控件对象会在AndroidElementHash维护的控件哈希表中保存起来。但是appium触发一个命令除了需要提供是否与控件相关这个原创 2014-10-31 13:28:02 · 4202 阅读 · 0 评论 -
Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章《Appium Android Bootstrap源码分析之简介》我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的了解,那么按照正常的写书的思路,下一个章节应该就要去看bootstrap是如何建立socket来获取数据然后怎样进行处理的了。但本人觉得这样子做并不会太好,因为到时整篇文章会变得非常的冗长,因为你在编写的过程中碰原创 2014-10-31 10:49:43 · 5947 阅读 · 3 评论 -
Appium Android Bootstrap源码分析之简介
在上一个系列中我们分析了UiAutomator的核心源码,对UiAutomator是怎么运行的原理有了根本的了解。今天我们会开始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium的源码分析之旅。本文在真个系列中会扮演一个简介的角色,不会分析任何的代码,只会先给大家一个基本的印象,方便大家在持有这个印象的基础上往下和本人一块分析。1. Bootstrap定义及在Appi原创 2014-10-30 14:50:50 · 7375 阅读 · 0 评论 -
UiAutomator源码分析之获取控件信息
根据上一篇文章《UiAutomator源码分析之注入事件》开始时提到的计划,这一篇文章我们要分析的是第二点:如何获取控件信息我们在测试脚本中初始化一个UiObject的时候通常是像以下这个样子:UiObject appsTab = new UiObject(new UiSelector().text("Apps"));appsTab.click()那么这个过程发生了什么呢?这就是原创 2014-10-29 09:25:15 · 11582 阅读 · 4 评论 -
UiAutomator源码分析之注入事件
上一篇文章《UiAutomator源码分析之UiAutomatorBridge框架》中我们把UiAutomatorBridge以及它相关的类进行的描述,往下我们会尝试根据两个实例将这些类给串联起来,我准备做的是用如下两个很有代表性的实例:注入事件获取控件这一篇文章我们会通过分析UiDevice的pressHome这个方法来分析UiAutomator是如何注入事件的,下一篇文章会描述原创 2014-10-28 16:24:05 · 6670 阅读 · 0 评论 -
UiAutomator源码分析之UiAutomatorBridge框架
上一篇文章《UIAutomator源码分析之启动和运行》我们描述了uitautomator从命令行运行到加载测试用例运行测试的整个流程,过程中我们也描述了UiAutomatorBridge这个类的重要性,说它相当于UiAutomation的代理(我们都知道UiAutomator是通过UiAutomation和AccessibilityService进行连接然后获取界面空间信息和注入事件的).那么今原创 2014-10-28 13:44:58 · 11754 阅读 · 2 评论 -
UIAutomator源码分析之启动和运行
通过上一篇《Android4.3引入的UiAutomation新框架官方简介》我们可以看到UiAutomator其实就是使用了UiAutomation这个新框架,通过调用AccessibilitService APIs来获取窗口界面控件信息已经注入用户行为事件,那么今天开始我们就一起去看下UiAutomator是怎么运作的。我们在编写了测试用例之后,我们需要通过以下几个步骤把测试脚本bui原创 2014-10-28 09:30:16 · 16992 阅读 · 3 评论 -
Android4.3引入的UiAutomation新框架官方简介
译者序:Google在Android 4.3发布时提供了一套新的UiAutomation框架来支持用户界面自动化测试,该框架通过运用已有的Accessibility APIs来模拟用户跟设备用户界面的交互:比如获取窗口界面控件和注入事件等。如在4.3之前UiAutomator工具是通过InputManager或者更早的WindowManager来注入KeyEvent等,4.3之后用的就是新框架Ui翻译 2014-10-27 11:07:53 · 15376 阅读 · 0 评论 -
monkey源码分析之事件注入方法变化
在上一篇文章《Monkey源码分析之事件注入》中,我们看到了monkey在注入事件的时候用到了《Monkey源码分析番外篇之Android注入事件的三种方法比较》中的第一种方法,通过Internal API的WindowManager的injectKeyEvent之类的方法注入事件。这种方法在android api level 16也就是android4.1.2之后已经发生了变化:原创 2014-10-26 09:40:12 · 3288 阅读 · 0 评论 -
Monkey源码分析之事件注入
本系列的上一篇文章《Monkey源码分析之事件源》中我们描述了monkey是怎么从事件源取得命令,然后将命令转换成事件放到事件队列里面的,但是到现在位置我们还没有了解monkey里面的事件是怎么一回事,本篇文章就以这个问题作为切入点,尝试去搞清楚monkey的event架构是怎么样的,然后为什么是这样架构的,以及它又是怎么注入事件来触发点击等动作的。在看这篇文章之前,希望大家最好先去看下另外几原创 2014-10-25 09:24:16 · 4748 阅读 · 2 评论 -
Monkey源码分析番外篇之Android注入事件的三种方法比较
原文:http://www.pocketmagic.net/2012/04/injecting-events-programatically-on-android/#.VEoIoIuUcaV往下分析monkey事件注入源码之前先了解下在android系统下事件注入的方式,翻译一篇国外文章如下。Method 1: Using internal APIs方法1:使用内部AP翻译 2014-10-24 16:54:52 · 7968 阅读 · 1 评论 -
Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
在分析monkey源码的时候有些背景知识没有搞清楚,比如在看到monkey是使用windowmanager的injectKeyEvent方法注入事件的时候,心里就打了个疙瘩,这种方式不是只能在当前应用中注入事件吗?Google了下发现了国外一个大牛有留下蛛丝马迹描述这个问题,特意摘录下来并做相应部分的翻译,其他部分大家喜欢就看下,我就不翻译了。How it worksBehin翻译 2014-10-24 15:23:48 · 3917 阅读 · 3 评论 -
Monkey源码分析之事件源
上一篇文章《Monkey源码分析之运行流程》给出了monkey运行的整个流程,让我们有一个概貌,那么往后的文章我们会尝试进一步的阐述相关的一些知识点。这里先把整个monkey类的结构图给出来供大家参考,该图源自网上(我自己的backbook pro上没有安装OmniGraffle工具,55美金,不舍得,所以直接贴网上的)图中有几点需要注意下的:MonkeyEve原创 2014-10-24 08:56:14 · 4031 阅读 · 0 评论 -
Monkey源码分析之运行流程
在《MonkeyRunner源码分析之与Android设备通讯方式》中,我们谈及到MonkeyRunner控制目标android设备有多种方法,其中之一就是在目标机器启动一个monkey服务来监听指定的一个端口,然后monkeyrunner再连接上这个端口来发送命令,驱动monkey去完成相应的工作。当时我们只分析了monkeyrunner这个客户端的代码是怎么实现这一点的,但没有谈monke原创 2014-10-23 13:06:11 · 4995 阅读 · 2 评论 -
MonkeyRunner源码分析之启动
在工作中因为要追求完成目标的效率,所以更多是强调实战,注重招式,关注怎么去用各种框架来实现目的。但是如果一味只是注重招式,缺少对原理这个内功的了解,相信自己很难对各种框架有更深入的理解。从几个月前开始接触ios和android的自动化测试,原来是本着仅仅为了提高测试团队工作效率的心态先行作浅尝即止式的研究,然后交给测试团队去边实现边自己研究,最后因为各种原因果然是浅尝然后就止步了,而自己最终也原创 2014-10-21 13:50:35 · 3838 阅读 · 2 评论 -
MonkeyRunner源码分析之与Android设备通讯方式
如前文《谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析》所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目标设备进行通信的。在上一篇文章中我们其实已经描述了其中一个方法,就是通过adb协议发送adb服务器请求的方式驱动android设备的adbd守护进程去获取FrameBuffer的数据生成屏幕截图。那么Mo原创 2014-10-20 08:42:48 · 5124 阅读 · 2 评论 -
MonkeyRunner源码分析之-谁动了我的截图?
本文章的目的是通过分析monkeyrunner是如何实现截屏来作为一个例子尝试投石问路为下一篇文章做准备,往下一篇文章本人有意分析下monkeyrunner究竟是如何和目标测试机器通信的,所以最好的办法本人认为是先跟踪一个调用示例从高层到底层进行分析,本人以前分析操作系统源代码的时候就是先从用户层的write这个api入手,然后一路打通到vfs文件系统层,到设备驱动层的,其效果比单纯的理论描述更容原创 2014-10-19 15:11:15 · 4740 阅读 · 0 评论 -
adb概览及协议参考
原文:https://github.com/android/platform_system_core/blob/master/adb/OVERVIEW.TXT)Implementation notes regarding ADB.ADB实现注解1. General Overview:1概要The Android Debug Bridge (ADB) is used to:A翻译 2014-10-19 10:37:23 · 6453 阅读 · 0 评论 -
Robotium中调用getActivity()方法导致程序挂起的研究浅析
1. 问题背景描述在工作中需要在没有项目源码的情况下直接使用robotium测试目标android平台launcher,平台的版本基于当前最新的android 4.4.2。之前在验证可行性的时候使用本人同样使用android4.4.2的测试手机htc incredable s针对一个只有apk的notepad应用做过同样的验证,在测试手机上运行完全没有问题。该测试代码如下:packag原创 2014-10-18 16:18:41 · 4068 阅读 · 7 评论 -
MonkeyImage API 实践全记录
1. 背景鉴于网上使用MonkeyImage的实例除了方法sameAs外很难找到,所以本人把实践各个API的过程记录下来然自己有更感性的认识,也为往后的工作打下更好的基础。同时也和上一篇文章《MonkeyDevcie API 实践全记录》起到相互呼应的作用。因为并没有MonkeyRunner的项目背景,所以这里更多的是描述各个API是怎么一回事,而不是描述在什么场景下需要用到。也原创 2014-10-09 16:49:45 · 2650 阅读 · 0 评论 -
MonkeyDevcie API 实践全记录
1. 背景使用SDK自带的NotePad应用作为实践目标应用,目的是对MonkeyDevice拥有的成员方法做一个初步的了解。以下是官方列出的方法的Overview。Return TypeMethodsCommentvoidbroadcastIntent (string uri, string action,原创 2014-10-09 10:27:49 · 2835 阅读 · 0 评论 -
MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)
1. 背景在使用MonkeyRunner的时候我们经常会用到Chimchat下面的HierarchyViewer模块来获取目标控件的一些信息来辅助我们测试,但在MonkeyRunner的官网上是没有看到相应的API的描述的,上面只有以下三个类的API引用信息(http://developer.android.com/tools/help/MonkeyDevice.html)Monk原创 2014-10-07 09:28:05 · 8615 阅读 · 3 评论 -
Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的。UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindElement的控件定位方法实践和建议今天我们换一个渊源更留长,当今更盛行的框架Robotium,实践下看它又是如何对控件进行定位的。1. 背景为保持这个系列的一致性原创 2014-10-05 16:27:10 · 9881 阅读 · 0 评论 -
UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
在本人之前的一篇文章Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位Android界面上的控件,当时只是一笔带过举了个例子。如该文给自己的承诺,今天特撰写此文以描述UIAutomator各种控件定位的方法,以作为前文的姊妹篇互通有无。1. 背景为了和前文达成一致,这次的实践对象同样也是使用SD原创 2014-10-04 10:07:48 · 25360 阅读 · 8 评论 -
Appium基于安卓的各种FindElement的控件定位方法实践和建议
AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用。1. findElementByName1.1 示例 el = driver.findElementByName("Add note"); assertThat(el.getText(),equalTo("Add note"));原创 2014-10-03 10:17:31 · 43018 阅读 · 4 评论 -
Appium0.18.x迁移到Appium1.x须知事项(灰常有用,解答了本人几个疑问)
英文原版:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.mdMigrating your tests from Appium 0.18.x to Appium 1.x把你的测试从Appium版本0.18.x迁移至Appium1.x版本Appium翻译 2014-10-03 09:52:28 · 6736 阅读 · 0 评论 -
为网上流行论点“UIAutomator不能通过中文文本查找控件”正名
1. 问题描述和起因相信大家学习UIAutomator一开始的时候必然会看过一下这篇文章。Android自动化测试(UiAutomator)简要介绍因为你在百度输入UIAutomator搜索的时候,该文章是排在第一位的。但是里面有一段说法说UIAutomator不能支持通过中文文本查找控件,这个说法害人不浅,如果不是自己去实践调查过,必然也会轻易放弃UIAutomato原创 2014-10-01 14:31:27 · 6615 阅读 · 7 评论 -
AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver
1. 问题描述和起因在使用Appium1.7.0及其以下版本的时候,我们可以直接使用如下代码来创建一个AppiumDriver实例进行对安卓设备的操作。driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);但在把Appium包升级到当前最新的2.0.0版本的时候,这段代码会引发如下原创 2014-10-01 13:05:33 · 16194 阅读 · 6 评论