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. AJAX-----09iframe模拟ajax文件上传效果原理1

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【final】站立会议---11.27

    名称:nice! 组长:李权 成员:于淼  刘芳芳韩媛媛 宫丽君 时间:11月27日 13:00 项目内容:约跑app(约吧) 地点:传媒西楼220室 内容: 新任务的分配 1.李权分配任务 2.韩媛 ...

  3. 高性能完成端口socket服务(IOCP)

    1. Winsock IO模型之IOCP模型 来自csdn blog,版权声明:本文为博主原创文章,未经博主允许不得转载. 我这里记录下,不算转载吧 http://blog.csdn.net/lost ...

  4. python视频教程大全集下载啦

    需要学习python的相关视频资源: python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV Python 从入门到精通视频(全60集)链接:http: ...

  5. CentOS7安装Nginx-1.9.9+PHP5.6

    linux系统CentOS7 Nginx 下载地址http://nginx.org/en/download.html wget下载路径http://nginx.org/download/nginx-1 ...

  6. struts_表单得到数据

    在大家学习struts表达式语言的时候经常会遇到,从表单的提交上面得到数据, 而如何将表单的数据得到呢? 下面就介绍其中的一种方式: :以类的方式进行注入我们以login为例子 首先可以在struts ...

  7. filebeat安装与基础用法

    来自官网,版本为1.2 下载rpm包并安装 wget -c https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm r ...

  8. Nginx的负载均衡 - 整体架构

    Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...

  9. Zip it

    https://www.codewars.com/kata/zip-it/train/csharp using System; using System.Collections.Generic; us ...

  10. Kanzi UI Solution

    Kanzi UI Solution是一个完整的跨平台的UI解决方案, 基于OpenGL 和 OpenGL ES.Kanzi为UI的设计.开发和部署在嵌入式设备上的图形用户界面提供一个完善的开发平台. ...