Testerhome社区的lihuazhang对selendroid官网的部分内容进行了翻译和讲解。

以下内容均摘自lihuazhang。感谢lihuazhang的讲解。原文地址:https://github.com/lihuazhang/selendroid

一、什么是 Selendroid

简介

Selendroid 是一个测试自动化框架,支持 Android 的原生应用,混合应用和移动 Web。软件测试工程师可以使用 Selenium 2 的客户端 API 来写自动化测试脚本。Selendroid 由 eBay Software Foundation 发起,是一个开源项目,由众多人士支持。目前代码 base 在 github 上。

支持的设备

Selendroid 支持且仅支持 Android 的模拟器和真机。同时可以集成到 Selenium Grid 中去进行大规模或者并发测试。

如果想用 Webdriver 来测试 iOS 的原生应用,混合应用和移动 Web的话,我们推荐 iosdriver。

特性

  • 完全兼容 Webdriver 的 JSON Wire Protocol
  • 不需要为了自动化修改被测应用
  • 使用一个 Android webview 应用来测试移动网页
  • 原生和混合应用自动化采用同样的理念
  • 使用不同的定位方式来查找 UI 元素
  • 支持手势:高级用户交互接口
  • Selendroid 可以同时和多台设备(模拟器或者真机)交互
  • 可以自动启动模拟器
  • 支持真机热插拔
  • 可以充当一个节点完全整合进 Selenium Grid,进行大规模和并发测试。
  • 支持多个 Android API (10到19)
  • 提供 Inspector 简化测试脚本开发
  • 可以扩展自己的插件!

二、Selendroid和其他框架的区别

Android 基于 UI 层面的自动化测试工具,都可以理解为是基于 Android 控件层面的,涉及原生控件和 WebView 两大类。

目前主流的测试方法主要有以下几种:

1. 通过 Android 提供的各种服务,来获取当前窗口的视图信息(通常是 dump 布局控件为 xml 文件)。然后,在当前视图内查找目标控件,并根据该控件属性信息计算出该控件中心点的坐标,进而构造出一个 Android Input 事件来实现对应用的自动化测试。其主要特点是:测试代码和被测应用各自运行在各自的进程内,相互独立。其代表有 Uiautomator。

2. 基于 Instrumentation,通过把测试代码和应用代码,确切地说是测试 APK 和被测 APK,运行在同一个进程中,通过 Java 反射机制,来获取当前窗口所有视图,并根据该视图查找到目标控件的属性信息,并计算出目标控件中心点坐标。然后,利用 Instrument 内部接口,实现点击操作。其代表有 Robotium。 Selendroid 属于第二种,基于 Instrumentation。

三、基本组件

Selendroid 有四大组件:

  1. Selendroid-Client:Java 客户端(基于 Selenium Webdriver API 实现的)
  2. Selendroid-Server:运行在安卓设备中 instrumentation server。和被测应用统一签名, 运行在同一进程。
  3. AndroidDriver-App:一个 android webview 应用,用来测试移动网页的。
  4. Selendroid-Standalone:大管家,负责将 Selendroid-Server 和 被测应用安装到设备中 去,同时负责管理不同的安卓设备。

Selendroid Client

你可以把 Selendroid Client 看成传统的 Webdriver Java Client + 移动特性的实现。

Selendroid 为在门户网页时代的自动化测试人员提供了无缝的接入。任何一个熟悉 Selenium Webdriver 的人都能轻易上手。

Selendroid Server

Selendroid Server 本身是一个 instrumentation,这个就像大家熟悉的 instrumentation 测试里面的测试应用。

  1. Selendroid Server 是一个 instrumentation apk。
  2. 这个 apk 里面起了一个 HTTP Server。
  3. 这个 HttpServer 实现了 Selenium Webdiver 的协议。 从Selendroid Client 过来的请求会映射到各个不同的处理方法中去。
  4. 而各个不同的处理方法,则是去通过 instrumentation 这个框架去和设备沟通,得到执行的结果,再由 HttpServer 返回到设备外部。

 AndroidDriver-App

这个就是一个 Android APP。只有一个 WebViewActivity。

这个应用的作用只有一个,当测试移动网页的时候,客户端的 Capabilities 设置为 SelendroidCapabilities.android(),设备中就会使用这个 apk 来作为移动网页的载体。

说白了,其实就充当了一个浏览器的作用。

Selendroid-Standalone

在前面我们说了,Selendroid Server 和 AndroidDriver 都是 apk,那这些 apk 是怎么被安装到设备中去呢?

Selendroid Server 启动的 HttpServer 在设备中,客户端测试脚本在 PC 机上,他们又是怎么沟通的呢?

客户端脚本怎么知道去哪个设备执行用例呢?

这些问题就要问 Selendroid 的大总管 —— Selendroid-Standalone

Selendroid-Standalone 在 selendroid-client 和 selendroid-server 之间扮演了一个代理的角色。

在执行 Selendroid 测试用例前,我们都需要招呼这个管家起来工作,所以准确来说这个管家主要会做以下几件事:

  1. 启动一个 HttpServer,接受来自客户端的请求。
  2. 对 selendroid-server,被测应用等 apk 进行统一签名。
  3. 根据客户端脚本参数初始化设备,比如和模拟器或者真机建立连接。
  4. 安装相关的应用。
  5. 将设备上的端口 forward 到 pc 机,打通selendroid-client 和 selendroid-server 之间的通讯。
  6. 实现了一些额外的接口,比如通过 adb 执行命令。

另外,大管家还维护两个池子:

  1. deviceStore: 大管家启动的时候,会找到机器上所有的 android 模拟器和连接的 android 设备,把这些设备信息添加到 deviceStore 中去,以备后续脚本使用。(大管家有两个监听器,分别对模拟器和真机的变化做监听,这样就可以实时更新池子。)
  2. appStore:我们启动大管家的时候会传 aut 给他,大管家会把这个 aut 加入到 appStore 中去。

初识selendroid的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. Asp.Net在多线程环境下的状态存储问题

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...

  2. java语言的认识

    class Hello{ public static void main(String [] args) { System.out.println("Hello Word 你好") ...

  3. 如何使用R语言解决可恶的脏数据

    转自:http://shujuren.org/article/45.html 在数据分析过程中最头疼的应该是如何应付脏数据,脏数据的存在将会对后期的建模.挖掘等工作造成严重的错误,所以必须谨慎的处理那 ...

  4. simplexml_load_file 抑制警告的直接输出

    $xml = simlexml_load_file($file, null, LIBXML_NOERROR); if (!is_object($this->xml)){ throw new Ex ...

  5. Maven学习(三) -- 仓库

    标签(空格分隔): 学习笔记 坐标和依赖时任何一个构件在Maven世界中的逻辑表示方式:而构件的物理表示方式是文件,Maven通过仓库来同意管理这些文件. 任何一个构件都有其唯一的坐标,根据这个坐标可 ...

  6. php的rss订阅

    一般来说我们很少自己造轮子,读取rss还是用git上的开源库吧 https://github.com/dg/rss-php 这个开源库不能读取博客园的rss订阅,新浪微博的格式显示有问题. 博客园的订 ...

  7. 跨站脚本 XSS<一:介绍>

    *XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任 跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入 ...

  8. jQuery学习笔记整理

    一.子元素选择器.:nth-child:匹配父元素下的第N个子或者奇偶元素.注意:序号是从1开始的,而eq是从0开始计数的!它匹配的是前方选择器选择到的元素的父元素下面的第几个元素.例如:ul li: ...

  9. iOS开发之UITapGestureRecognizer单双击

    转自手势开发 IOS开发之手势——UIGestureRecognizer 共存 在 iPhone 或 iPad 的开发中,除了用 touchesBegan / touchesMoved / touch ...

  10. magic_quotes_gpc

    ini里面有这个magic_quotes_gpc设置,是为了防止忘记处理而和mysql有冲突,引起mysql的风险,于是,认为的加上\slash,但是我们在Php中获得值的时候,需要判断如果这个值为1 ...