移动自动化测试Appium之环境安装和配置

本文主要讲述在Mac机器上如何安装和配置Appium移动自动化工具,及其遇到的一些问题和解决办法。

1. 基本环境

这是在安装Appium之前的基本软硬件环境,

Mac Mini (OS X Yosemite 10.10.5)

iPod(iOS 8.3)

Xiaomi 4c (Android 5.1.1)

接下来需要在上述环境中安装和配置如下工具,

JDK 7 (1.7.75)

Android SDK (24.4.1)

Xcode (7.2.1)+ iOS simulator (8.3)

Homebrew (0.9.5)

Node (5.7.1)

Appium for Mac (1.4.13)

2. 安装JDK7

Java官方网站下载JDK7,安装后配置如下环境变量,

export JAVA_HOME=/jdk_installation_path/
export PATH=$JAVA_HOME/bin:$PATH
3. 安装Android SDK Tools

国内可以到这里(Android Studio 中文组)下载最新的Android SDK Tools Package,安装后配置如下环境变量,

export ANDROID_HOME=/jdk_installation_path/
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH

工具包安装后,其实里面还没有Platform Tools,这需要启动Android SDK Manager,通过SDK Manager下载,具体见下图,

android sdk manager

在下载前,推荐参考此文章配置下载源为国内的镜像地址,以提高下载速度。下图配置下载源到东软,

android sdk settings

4. 安装Xcode

直接登录App Store,安装最新版本的Xcode,然后simulator的不同版本可以在Xcode  Preferences中的Downloads页中选择下载。

5. 安装Homebrew

Homebrew是Mac OS上的包管理工具,可以安装一些底层工具包。运行下面的命令即可在Mac上安装这个包管理工具brew,

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

更多详细安装信息可以参考homebrew网站

安装完毕之后,运行如下两个命令安装上相应的工具,

brew install ideviceinstaller
brew install ios-webkit-debug-proxy
6. 安装Node

登录到官方网站,下载最新的Node.js并安装。

7. 安装Appium

Appium官方下载地址:https://bitbucket.org/appium/appium.app/downloads/

选择最新Mac安装包appium-1.4.13.dmg并下载,双击后安装到应用程序中。

8. 环境检查

上述所有工具安装配置完毕之后,运行Appium GUI,点击上面的环境检查按钮,如果环境配置成功的话,则会出现如下信息,

Running iOS Checks
 Xcode is installed at /Applications/Xcode.app/Contents/Developer
 Xcode Command Line Tools are installed.
 DevToolsSecurity is enabled.
 The Authorization DB is set up properly.
 Node binary found at /usr/local/bin/node
 iOS Checks were successful.

Running Android Checks
 ANDROID_HOME is set to "/Users/test/ws/local/android-sdk"
 JAVA_HOME is set to "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/."
 ADB exists at /Users/test/ws/local/android-sdk/platform-tools/adb
 Android exists at /Users/test/ws/local/android-sdk/tools/android
 Emulator exists at /Users/test/ws/local/android-sdk/tools/emulator
 Android Checks were successful.

 All Checks were successful
8. 移动设备配置

a)  安卓设备

在安卓设备上,需要开启开发者选项,并且连接USB后启用调试模式。

配置完毕后,通过USB线连接上设备,在机器上运行adb devices命令就可以查询到当前连接设备的GUID,

android ios设备连接

b)  iOS设备

打开“设置” -》“开发者”选项 -》启用“Enable UI Automation”选项

打开“设置” -》“Safari”选项 -》“高级”选项 -》“高级”选项-》启用“JavaScript”和“Web检查器”两个选项。

配置完毕后,可以通过xcode或者instruments查看到当前连接的iOS设备。

9. 遇到的一些问题和解决办法

问题1 - Appium连接iOS 设备启动应用时,Appium提示 “Couldn't not initialize ideviceinstaller;make sure it is installed and works on your system”。

这是由于当前环境缺少ideviceinstaller这个工具,运行命令brew install ideviceinstaller安装后,问题解决。

 

问题2 - Appium连接iOS 设备报错,错误消息为Could not connect to WebKitRemoteDebugger server

这是由于当前环境缺少ios-webkit-debug-proxy这个工具,运行命令brew install ios-webkit-debug-proxy安装后,问题解决。

https://testerhome.com/topics/3129

https://testerhome.com/topics/3206

更多参考信息

appium tutorial - Setting up Appium,这是官方安装文档。

appium tutorial中文版 -http://appium.io/slate/cn/master/?ruby#about-appium

test home的中文文档 1 -https://testerhome.com/topics/3144,该文档不仅仅是一个API文档,也有安装配置相关部分。

appium的中文文档 2 - https://testerhome.com/wiki/appiumdoccn

 

移动自动化测试Appium之架构

Appium是一个优秀的开源移动自动化测试框架,其封装了android UiAtomatorios UIAutomation原生技术,提供统一的web driver接口访问两大移动平台的UI元素,还提供各种语言的driver client和测试工具,方便测试用例的开发和调试。

Appium自2013年发布以来,几乎每隔1-2个月就有一个新版本发布,目前最新的稳定版本为1.4.13(见此链接)。关于其名字由来,还和selinium有关,selinium是一个web平台上自动化测试框架,创始人Dan Cuellar和Jason Huggins取名appium,意思是希望能够像selinium一样,提供面向移动app的自动化测试框架标准,实际上Appium也已经成为当前移动平台自动化的事实标准。

Appium的架构图

 

Appium架构图

 

图中,Appium Server提供了符合web driver规范的自动化接口,Client通过Http协议和server进行通讯和进行各种自动化操作,包括建立自动化session,获取元素,点击、滑动和截屏等等,Client有各种语言的实现版本,比如Java\Python\Ruby\JavaScript\Object C\PHP\C#(.NET),RobotFramework也有对其的支持。

Appium作为一个移动自动化测试框架,不仅仅简单地提供driver,还为UI自动化提供各种工具,比如带有GUI界面的Appium Server,用于调试定位UI元素的Appium Inspector,以及丰富的Appium Client类库。

1)Appium Server GUI

为了方便让用户快速配置Appium server driver所需要的信息,Appium提供了具有UI界面的配置运行工具,如图所示,

appium_gui

在这里,可以方便的配置appium server driver所需要的各种信息,例如app 安装包,android/ios的运行版本,服务器端口等等。

2) Appium Inspector

在通过Appium  GUI启动Appium Server之后,可以点击界面上的放大镜按钮来启动Appium inspector。这个工具可以很方便查看和定位App上的UI元素,还具有测试用例录制的功能。

appium_inspector

3) Appium Client类库

Appium Client封装了和driver交互的各种操作,不仅如此,它还提供了PageFactory类,用于对page object  pattern的支持,我们可以通过注解的方式同时定义同一App UI元素在android和iOS上的查询locator,

@iOSFindBy(xpath = "//xpath/")
@AndroidFindBy(id = "start_btn")
private WebElement startButton;

测试用例在运行的时候,appium client会自动根据driver类型自动选择和设备对应的locator来寻找UI元素,这样就可以方便的分离出单独的UI层,然后可以写出同时跑在android和iOS设备的同一测试用例。

 

参考链接

1. appium官网:http://appium.io/introduction.html

Java的测试覆盖率工具

对于Java语言的测试覆盖率工具众多,有开源免费的Jacoco/PIT,也有商业的Clover,也有开发了十多年目前还在发布的的覆盖率工具Cobertura,

  1. Emma (http://eclemma.org/jacoco/)
  2. JCov (https://wiki.openjdk.java.net/display/CodeTools/jcov)
  3. Code Cover (http://codecover.org/)
  4. Cobertura (http://cobertura.github.io/cobertura)
  5. PIT (http://pitest.org/)
  6. Clover (https://www.atlassian.com/software/clover)
  7. Jacoco (http://eclemma.org/jacoco/)

下图将上述覆盖率工具的功能、授权方式、代码的注入、报告和语言支持、对各个工具的集成支持、开发活跃度一一列出,方便大家进行一些比较,(其中Emma已停止开发,其被Jacoco取代,不再列入)

java_cov_tools_comparison

表格中代码注入方式的含义如下,

-- source code: 在源代码编译时刻进行注入

-- bytecode offline: 对编译后的类二进制文件进行注入,在JVM载入内存前

-- bytecode on the fly: 在JVM载入二进制文件时使用application classloader动态注入

比较推荐使用Jacoco,各种工具的支持比其它开源工具更好,社区也很活跃,个人也在使用其开发覆盖率平台的工具,使用下来感觉还不错。

Jacoco提供了丰富的API接口,其开发文档和相关小工具还是比较多,目前主要集成在各个开发工具和构建分析工具中,开发人员一般在IDE中使用各种Jacoco插件分析代码,测试人员基本上通过ant/maven工具生成覆盖率报告,然后将报告展现在CI/Sonar等各个工具上。但是Jacoco的功能是不仅仅于此,比较遗憾的是还没有一个通用的覆盖率收集平台工具,能够为测试活动提供一个整体解决方案,对于测试,一般希望能够按阶段按环境来收集覆盖率数据,能够实时监控不仅仅来自自动化测试的数据,还可以为手动测试提供实时监测数据和报告,能够分析增量代码的覆盖率数据。目前的覆盖率工具基本以插件的方式存在,功能和报告分散,也许在不久的将来会有个覆盖率平台能够开发出来解决这个问题,当然这个覆盖率平台也一定不仅仅支持Java语言。

 

参考资料,

-- Clover官方wiki对各个覆盖率工具的比较: Link

-- Wiki上对各个覆盖率工具的比较:Link

-- SonarQube对覆盖率工具的介绍: Link

-- IBM DeveloperWorks对Jacoco的介绍:Link