1 android 自动化测试初探

29
1 Android 自动化测试初探 本章的目的是让有经验的测试开发工程师迅速上手 Android 自动化测试代码的编写流 程。因为大部分 Android 程序都是基于 SDK 开发,所以本章只介绍为基于 Android SDK 应用编写自动化测试代码,想了解测试 Android NDK 应用的方法可阅读第 9 章。 1.1 快速入门 Android 开发环境的安装,由于种种原因,变得非常难于实现,这在一定程度上给 Android 开发的初学者带来了很大的不便。为了帮助读者将主要精力放在学习 Android 自动 化测试的开发技术上,而不是将时间浪费在环境的准备和安装上,本书配套资源提供了一个 VirtualBox 虚拟机,方便读者学习和尝试本书里讲解的各种技术。本书后续章节的示例代码 和示例命令,如果没有特殊说明,均使用该虚拟机演示。使用该虚拟机可参照以下步骤: 1)下载并安装最新版本的 VirtualBoxhttps://www.virtualbox.org/wiki/Downloads2)打开 VirtualBox,依次单击菜单栏的“控制”和“注册”菜单项,导入“ AndroidBook. vbox ”虚拟机。 3)在 VirtualBox 中选择刚刚注册的虚 拟机,单击工具栏里的“启动”按钮启动它。 4)在虚拟机上安装的是编写本书时最 新的 Ubuntu 12.04 操作系统,超级用户的用 户名和密码均为“ student ”。 5)在虚拟机中已经准备好了 EclipseAndroid 开发环境和使用真机设备的相关配 置。在虚拟机中单击“ Dash ”图标(或者同 时按下键盘的 Alt F2),并输入“ gnome- terminal ”打开终端程序,如图 1-1 所示。 1-1 在附带虚拟机中打开终端程序

Upload: others

Post on 09-Jun-2022

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Android 自动化测试初探

第 1 章

Android 自动化测试初探

本章的目的是让有经验的测试开发工程师迅速上手 Android 自动化测试代码的编写流

程。因为大部分 Android 程序都是基于 SDK 开发,所以本章只介绍为基于 Android SDK 的

应用编写自动化测试代码,想了解测试 Android NDK 应用的方法可阅读第 9 章。

1.1 快速入门

Android 开发环境的安装,由于种种原因,变得非常难于实现,这在一定程度上给

Android 开发的初学者带来了很大的不便。为了帮助读者将主要精力放在学习 Android 自动

化测试的开发技术上,而不是将时间浪费在环境的准备和安装上,本书配套资源提供了一个

VirtualBox 虚拟机,方便读者学习和尝试本书里讲解的各种技术。本书后续章节的示例代码

和示例命令,如果没有特殊说明,均使用该虚拟机演示。使用该虚拟机可参照以下步骤:

1)下载并安装最新版本的 VirtualBox:https://www.virtualbox.org/wiki/Downloads。2)打开 VirtualBox,依次单击菜单栏的“控制”和“注册”菜单项,导入“ AndroidBook.

vbox”虚拟机。

3)在 VirtualBox 中选择刚刚注册的虚

拟机,单击工具栏里的“启动”按钮启动它。

4)在虚拟机上安装的是编写本书时最

新的 Ubuntu 12.04 操作系统,超级用户的用

户名和密码均为“ student”。

5)在虚拟机中已经准备好了 Eclipse、Android 开发环境和使用真机设备的相关配

置。在虚拟机中单击“ Dash”图标(或者同

时按下键盘的 Alt 和 F2),并输入“ gnome-terminal”打开终端程序,如图 1-1 所示。 图 1-1 在附带虚拟机中打开终端程序

Page 2: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探2

6)在终端中输入下列命令启动 Eclipse:

$ ~/eclipse/eclipse

注意

在 Windows 中,如果当前登录用户的用户名是中文,当在资源管理器中双击 VirtualBox的 .msi 安装包尝试安装时,VirtualBox 安装程序会弹出“系统找不到指定的路径”的错误消

息框,如图 1-2 所示。

图 1-2 “系统找不到指定的路径”的错误消息框

这是 VirtualBox 安装程序的一个缺陷,因为 MSI 安装程序运行时会解压一些临时文件

到登录用户的临时文件夹中,而 VirtualBox 安装程序对包含中文的路径支持得不是很好,

就会弹出这样的对话框,所以这里建议使用英文名的管理员用户安装。

1.2 待测示例程序

本章示例所采用的待测程序是一个简单的 Android 应用,模拟数据库程序的增删改查功

能。程序的主界面是一个书籍列表界面,按作者名列出了每个作者的著作书名。在列表中单

击书名可以查看书籍的详细信息,在详细信息界面上单击“编辑”按钮可以编辑书籍的信

息,完成后单击“保存”按钮即可保存更改并返回到列表界面。列表界面上有“删除”和“添

加”按钮,向列表中添加一本新书籍的操作与“编辑”类似;在从列表中删除一本书时,需

要先单击“删除”按钮,然后再单击要删除的书籍。待测示例程序的主界面如图 1-3 所示。

待测程序的源代码可以在配套资源(或虚拟机的 /home/student/samplecode 中)的

“ chapter1\cn.hzbook.android.test.chapter1”文件夹中找到,按照下面的步骤在 Eclipse中导入该工程:

1)启动 Eclipse 。2)依次单击 Eclipse 菜单栏中的“File”、“ Import…”菜单项。

3)在新弹出的“ Import”对话框中选择“ Existing Projects into Workspace”列表项,

然后单击“Next”按钮进入下一步,如图 1-4 所示。

Page 3: 1 Android 自动化测试初探

1.2 待测示例程序 ◆ 3

图 1-3 待测示例程序的主界面截图

图 1-4 在 Eclipse 中导入待测示例应用工程

4) 在“ Import Projects” 界 面 中 勾 选“ Select root directory” 项, 并 单 击 旁 边 的

“ Browse…”按钮,填入配套资源中待测应用源文件的根目录。完成后应该可以在

“ Projects”列表框中看到要导入的工程名:“ cn.hzbook.android.test.chapter1”。勾选“ Copy projects into workspace”复选框,以便将应用的源代码复制到本地硬盘。最后单击“Finish”

完成导入操作。如图 1-5 所示。

5)完成导入后,用右键单击刚导入的工程文件,并依次选择“ Run As”,“ Android

Page 4: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探4

Application”运行应用。如图 1-6 所示。

图 1-5 在 Eclipse 中导入工程向导中选择待测示例工程

图 1-6 在 Eclipse 中运行示例待测应用

6)这时 Eclipse 会自动启动 Android 模拟器并打开应用。此时打开 Eclipse 下方的

“Console”窗口并选择“Android”下拉框,应该可以看到类似图 1-7 的输出。

Page 5: 1 Android 自动化测试初探

1.2 待测示例程序 ◆ 5

图 1-7 在 Eclipse 中启动应用的过程输出

图 1-7 的输出中详细显示了 Eclipse 从启动模拟器到运行应用的完整过程。在测试过程

中,会经常用到输出内容来排查错误,下面结合注释解释输出内容:

# 在这里 Eclipse 接受到启动 Android 应用的命令[2012-11-09 11:21:37 - cn.hzbook.android.test.chapter1.MainActivity] Android

Launch!#Eclipse 首先确定用来与模拟器进行通信(调试程序)的 adb 程序是否运行,如果没有运行就会启动它#adb 程序的用法会在后面调试章节中讲解[2012-11-09 11:21:37 - cn.hzbook.android.test.chapter1.MainActivity] adb is

running normally.# 找到应用的主 Activity 并启动它[2012-11-09 11:21:37 - cn.hzbook.android.test.chapter1.MainActivity] Performing

cn.hzbook.android.test.chapter1.MainActivity activity launch# 自动选择最合适的模拟器,这里因为示例应用最低要求 Android 2.2 版本,而系统中正好有# Android 2.2 版本的模拟器,所以直接做出最佳选择[2012-11-09 11:21:37 - cn.hzbook.android.test.chapter1.MainActivity] Automatic

Target Mode: launching new emulator with compatible AVD 'Android2'[2012-11-09 11:21:37 - cn.hzbook.android.test.chapter1.MainActivity] Launching

a new emulator with Virtual Device 'Android2'# 这些错误与 OpenGL 有关,可以忽略它们[2012-11-09 11:21:40 - Emulator] OpenGL Warning: Failed to connect to host.

Make sure 3D acceleration is enabled for this VM.[2012-11-09 11:21:41 - Emulator] Failed to load libGL.so[2012-11-09 11:21:41 - Emulator] error libGL.so: cannot open shared object fi le:

No such fi le or directory[2012-11-09 11:21:41 - Emulator] Failed to load libGL.so[2012-11-09 11:21:41 - Emulator] error libGL.so: cannot open shared object fi le:

No such fi le or directory# 模拟器会自动将自身窗口调整到屏幕的最佳位置[2012-11-09 11:21:41 - Emulator] emulator: emulator window was out of view and was

recentered[2012-11-09 11:21:41 - Emulator]

Page 6: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探6

# 在模拟器启动时,Eclipse 会不停扫描系统端口,一旦模拟器启动完毕,Eclipse 就会连接上它[2012-11-09 11:21:42 - cn.hzbook.android.test.chapter1.MainActivity] New emulator

found: emulator-5554[2012-11-09 11:21:42 - cn.hzbook.android.test.chapter1.MainActivity] Waiting

for HOME ('android.process.acore') to be launched...[2012-11-09 11:22:13 - cn.hzbook.android.test.chapter1.MainActivity] HOME is up

on device 'emulator-5554'#Eclipse 将编译好的应用上传到模拟器[2012-11-09 11:22:13 - cn.hzbook.android.test.chapter1.MainActivity] Uploadingcn.hzbook.android.test.chapter1.MainActivity.apk onto device 'emulator-5554'# 接着安装应用[2012-11-09 11:22:13 - cn.hzbook.android.test.chapter1.MainActivity] Installingcn.hzbook.android.test.chapter1.MainActivity.apk...[2012-11-09 11:22:35 - cn.hzbook.android.test.chapter1.MainActivity] Success!# 成功安装后,就直接启动应用[2012-11-09 11:22:35 - cn.hzbook.android.test.chapter1.MainActivity] Starting

activity cn.hzbook.android.test.chapter1.MainActivity on device emulator-5554[2012-11-09 11:22:37 - cn.hzbook.android.test.chapter1.MainActivity] ActivityManager:

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.hzbook.android.test.chapter1/.MainActivity }

注意

模拟器启动后,默认处于锁屏状态,需要手动解锁,解锁后就会看到应用已经启动。自

动解锁的方式在 10.3 节的代码清单 10-10 中说明。

1.3 第一个 Android 应用测试工程

本章先建立一个简单的 Android 自动化单元测试工程来演示 Android 自动化测试的流

程。在 Android 系统中,Android 自动化单元测试也是一个 Android 应用工程,它跟普通

Android 应用工程不同的地方是启动的方式不一样,这在本书第 3 章会讲到。

Android 的 Eclipse ADT 插件提供了 Android 自动化单元测试的模板,方便我们创建自

动化测试项目,这里新建一个测试工程:

1)启动 Eclipse ,这次可以看到之前在工作空间已被导入的 Android 工程。

2)依次单击 Eclipse 菜单栏里的“File”、“New”、“Project…”菜单项,如图 1-8 所示。

图 1-8 在 Eclipse 中新建工程(1)

3)在弹出的“ New Project”对话框中,展开“ Android”列表项,并选择“ Android Test Project”项来指明要创建一个 Android 自动化测试工程,然后单击“ Next”按钮,如

Page 7: 1 Android 自动化测试初探

1.3 第一个 Android 应用测试工程 ◆ 7

图 1-9 所示。

图 1-9 在 Eclipse 中新建 Android 工程(2)

4)在接下来的“ Create Android Project”对话框中,在“ Project Name”文本框中输入

工程名称,一般来说,自动化测试工程的名称是在待测应用的名称后加上 .test 后缀。这里

的待测应用是在 1.2 节导入的 cn.hzbook.android.test.chapter1,因此将测试工程命名为“ cn.hzbook.android.test.chapter1.test”。单击“Next”按钮进入下一步。如图 1-10 所示。

图 1-10 为第一个测试程序命名

Page 8: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探8

5)在“ New Android Test Project”对话框中,由于待测应用是另外一个工程,因此一

般建议将测试代码和产品代码分离,选中“An existing Android project:”单选框,并在下面

的列表框中选择 1.2 节导入的 cn.hzbook.android.test.chapter1,选择“ Finish”按钮完成测试

工程的创建,如图 1-11 所示。

图 1-11 在新建测试工程向导中选择被测应用

6)这时会在 Eclipse 中展开刚刚创建的测试工程,可以看到已经自动创建了一个与工程

同名的空的 Java 包,如图 1-12 所示,我们将在这个包中添加测试代码。

图 1-12 测试工程的结构

7)在 Eclipse 中右键单击“ cn.hzbook.android.test.chapter1.test”包,依次选择“ New”

和“JUnit Test Case”菜单项来创建一个测试用例源文件,如图 1-13 所示。

8)在弹出的“ New JUnit Test Case”对话框中,有两种单元测试类型 JUnit 3 和 JUnit 4,分别对应 JUnit 不同版本测试用例的编写方式,这两种编写方式在 2.2 节中讲解,这里我

们选择“New JUnit 3 Test”单选框。

Page 9: 1 Android 自动化测试初探

1.3 第一个 Android 应用测试工程 ◆ 9

图 1-13 新建测试用例源文件

除了“ Name”和“ Superclass”文本框以外,其他控件均使用默认值。在“ Name”文

本框中输入“ HelloWorldTest”,单击“ Superclass”文本框附近的“ Browse…”按钮,如

图 1-14 所示。

图 1-14 为新测试用例命名

Page 10: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探10

9)在弹出的“ Superclass Selection”对话框的“ Choose a type”文本框中输入“ Activity-InstrumentationTestCase2”,并单击“OK”按钮,指明新单元测试的基类是“ActivityInstrume-ntationTestCase2”,如图 1-15 所示。

图 1-15 选择测试用例的基类

10)单击“Finish”按钮添加测试用例。

11)这时新创建的测试用例源文件会有一个编译错误,这是因为 ActivityInstrumenta-tionTestCase2 是一个泛型类,我们没有为它指明实例化泛型的类型参数,Java 泛型将在第 2章中介绍,这里我们暂时忽略这个编译错误,如图 1-16 所示,下一步会解决它。

图 1-16 新测试用例的源文件

12)在 HelloWorldTest.java 中用代码清单 1-1 的代码替换原来的代码并保存。

代码清单 1-1 Android 自动化测试代码的简明示例

1. package cn.hzbook.android.test.chapter1.test;2.

Page 11: 1 Android 自动化测试初探

1.3 第一个 Android 应用测试工程 ◆ 11

3. import cn.hzbook.android.test.chapter1.MainActivity;4. import cn.hzbook.android.test.chapter1.R;5. import android.test.ActivityInstrumentationTestCase2;6. import android.widget.Button;7. 8. public class HelloWorldTest extends9. ActivityInstrumentationTestCase2<MainActivity> {10. 11. public HelloWorldTest() {12. super(MainActivity.class);13. }14. 15. @Override16. protected void setUp() throws Exception {17. super.setUp();18. }19. 20. public void test 第一个测试用例 () throws Exception {21. fi nal MainActivity a = getActivity();22. assertNotNull(a);23. fi nal Button b = 24. (Button)a.fi ndViewById(R.id.btnAdd);25. getActivity().runOnUiThread(new Runnable() {26. public void run() {27. b.performClick();28. }29. });30. 31. Thread.sleep(5000);32. }33. }

13) 在 Eclipse 中用右键单击”cn.hzbook.android.test.chapter1.test”工程,依次单击“Run As”和“Android JUnit Test”菜单项,如图 1-17 所示。

图 1-17  在 Eclipse 中运行 Android 自动化测试用例

14)如果没有连接真机设备,Eclipse 会启动模拟器,并打开“ cn.hzbook.android.test.chapter1”应用,单击“添加”按钮,等待 5 秒钟,关闭应用。这时在 Eclipse 中会多出一个

Page 12: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探12

“ JUnit”的标签,其中显示了测试结果——执行并通过一个测试用例,如图 1-18 所示。

在代码清单 1-1 中,有 JUnit 使用经验的读者可以发现代码

是一个非常标准的 JUnit 单元测试代码,其只有一个测试用例

“ test 第一个测试用例”,在 JUnit 3 中,以“ test”为前缀命名

的函数会被当作一个测试用例执行。在代码清单 1-1 的第 23 行,

测试用例首先获取对待测应用“添加”按钮的引用,它的标识符

是“ btnAdd”;第 24 到 28 行针对刚刚抓取到的按钮执行了一个

单击操作;因为自动化测试代码执行速度比人工操作要快很多,

所以我们在第 31 行加入了一个显式等待 5 秒钟的操作,等待待

测应用的界面更新,以便看到自动化的效果。

1.4 搭建自动化开发环境

在 1.2 和 1.3 节的讲解中我们看到,Eclipse 在调试运行 Android 应用和测试代码时,自

动启动 Android 模拟器,在模拟器上部署相关应用和代码并运行,这是因为演示用的虚拟机

已经搭建好了 Android 开发环境,如果需要在物理机或其他机器上搭建同样的环境,也可以

参照本节的做法。

1.4.1 安装 Eclipse 和 ADT 开发包

因为 Eclipse 和 Android SDK 开发环境均需要 JDK 支持,所以要先下载并安装最新的

JDK。

在 Windows 平台下,直接在 Oracle 的官网(http://www.oracle.com/technetwork/java/ ❏

javase/downloads/index.html)下载最新的 Java SE SDK 并安装即可。

在 Linux 平台下,可以安装从 Oracle 官网上下载的 SDK,也可以使用系统自带的软 ❏

件包管理工具安装其他 JDK 实现,例如在 Ubuntu 12.04 上,可以使用下列命令安装

Java SDK:

$ sudo apt-get install openjdk-7-jdk

Android 还在官网上建议,如果机器上运行的 Ubuntu 是 64 位版本,在安装 JDK 之 ❏

前,需要通过如下命令安装 ia32-libs 包:

$ sudo apt-get install ia32-libs

接下来安装 Eclipse。Android SDK 仅支持 Eclipse 3.6 以上版本。无论是 Windows 还

是 Linux 平台,都推荐从 Eclipse 官网(http://www.eclipse.org/downloads/)下载 SDK,谷

歌建议使用 Eclipse Classic 4.2、Eclipse IDE for Java Developers 或 Eclipse for RCP and RAP Developers 版本。

最 后 安 装 Android SDK。Android 为 Eclipse IDE 提 供 了 一 个 插 件, 名 为 Android

图 1-18 cn.hzbook.android.

test.chapter1.test 的运行结果

Page 13: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 13

Development Tools(ADT),可以通过 Eclipse 下载并安装 ADT 及 Android SDK。

1)启动 Eclipse,在菜单中选择 Help-> Install New Software。2)在新打开的对话框中单击右上角的“Add”按钮。

3) 在“ Add Repository” 对 话 框 的“ Name” 文 本 框 中 输 入“ ADT Plugin”, 在

“Location”文本框中输入下列网址:

https://dl-ssl.google.com/android/eclipse/

http://dl-ssl.google.com/android/eclipse/

4)单击“OK”按钮关闭“Add Repository”对话框,并得到 Eclipse 下载完的安装列表。

5)在“ Available Software”对话框中选择

“Developer Tools”复选框并单击“Next”按钮,

进入如图 1-19 所示的界面。

6)接下来显示的对话框会列出将要下载的

工具列表,单击“Next”按钮确认。

7)最后接受授权协议并单击“ Finish”按

钮开始安装。如果 Eclipse 弹出一个对话框警告

无法验证软件的身份和完整性,单击“OK”按钮。

8)最后重启 Eclipse 就可以使用 Android 开发环境了。

注意

有时会因为网速慢或网络上有防火墙导致安装失败,这时可以尝试离线安装,在本书

配套资源中附有本书写作时最新的 Android 开发插件包 20.0.3 版本,使用方法是在“ Add Repository”对话框的“ Name”文本框中输入“ ADT Plugin”,单击“ Archive…”按钮,

添加 ADT-20.0.3.zip,单击“OK”按钮完成压缩包安装,如图 1-20 所示。

图 1-20 安装 ADT 时指定插件仓库位置

1.4.2 创建模拟器

Android 自动化测试用例可以运行在模拟器和真机上。模拟器的执行效率比真机要低

图 1-19 安装 Android 开发工具包(ADT)

Page 14: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探14

一些,建议在没有真机的情况使用模拟器开发和执行测试用例。使用 Android SDK 的工具

AVD Manager 创建模拟器,它提供了图形界面和命令行支持。

可以使用 AVD Manager 创建任意多个模拟器以便测试时使用。一般建议在要求的最低

版本之上的所有 Android 版本将应用都测试一遍,这时创建多个模拟器并在其上执行自动化

测试就不失为一个好策略。

在创建模拟器时,选择模拟器的 Android 系统需要注意以下几点:

模拟器使用的 Android 系统版本应该不低于待测应用要求的版本,待测应用要求的最 ❏

低版本可以在其工程的 manifest.xml 文件的 minSdkVersion 中找到,否则待测应用无

法在模拟器上启动。

建议在测试待测应用时,除了在其要求的最低版本上执行测试,至少还应该在最新 ❏

版本的 Android 系统模拟器上测试一遍,以验证待测应用的向后兼容性。向后兼容测

试确保在用户升级他的手机系统后,应用还能继续正常工作。

如果待测应用在 manifest 文件中通过声明 uses-library 元素来指明对外部库的依赖 ❏

关系,那么应用只能在包含该外部依赖库的 Android 系统上运行,因此一般需要使

用包含了附加(Add-on)组件的

Android 系统来创建模拟器。

1.通过图形界面创建

通过以下方式启动 AVD Manager:在 Eclipse 中,要么是依次单击 ❏

菜 单 里 的“ Window”>“ AVD Manager”,要么是单击工具栏中

的“AVD Manager”图标。

如果使用的是其他 IDE,可以 ❏

切 换 到 Android SDK 的 主 目 录

的“ tools/”文件夹,双击或在终

端上执行“~ /android-sdk/tools/android avd”命令。

单击“New”按钮,会弹出“Create New AVD”对话框来创建一个新的模拟

器,如图 1-21 所示。

参考表 1-1 在图 1-21 中填入信息。

表 1-1 新模拟器的设置参数

属  性 值 说  明

Name Android22新模拟器的名称,这个名称是系统唯一的,当在命令行中启动模

拟器时,使用 Name 属性的值指定模拟器

Target Android 2.2-API Level 8 模拟器中 Android 系统的版本号

图 1-21 创建模拟器

Page 15: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 15

属  性 值 说  明

SD Card Size 256虚拟的 SD 卡的空间,默认以 MB 计算,也可以通过旁边的下拉

框选择新的计量单位

单击“Create AVD”按钮完成创建模拟器。

在 Android 模拟器管理窗口上,选择刚刚创建好的模拟器,并单击“Start”按钮。

在新弹出的“ Launch Options”对话框上单击“ Launch”最终启动模拟器。“ Launch Options”对话框上的几个选项是用来控制模拟器启动的参数,如表 1-2 所示。

表 1-2 模拟器启动的参数说明

参  数 说  明

Scale display to real size

将模拟器缩放到与真实设备相同的尺寸,由于手机屏幕要比电脑屏幕的像素密度大,

因此,对于相同尺寸的屏幕,手机屏幕上显示的像素要比电脑屏幕多,例如同样是 800 × 600 的分辨率,手机屏的物理尺寸看起来要明显比电脑屏的物理尺寸小。

这个选项有三个子选项:

Screen size (in),模拟器屏幕的物理尺寸,单位是英寸。

Monitor dpi,电脑屏幕的每英寸像素点数,默认值是 96,单击问号可以通过指定的电

脑尺寸和分辨率大小自动计算出该值。

Scale,表示模拟器屏幕和实际显示屏幕尺寸的比例,1 表示尺寸相同,小于 1 则表示

实际显示的模拟器屏幕将被缩小,反之则放大

Wipe user data清除用户自定义数据,重置虚拟机。建议在大规模自动化测试时启用这个选项,可以

规避前面测试用例在模拟器中写入或修改了一些数据,影响到后面测试用例的正常执行

Launch from snapshot

使模拟器从现有的镜像中恢复。如果在创建模拟器时,勾选了“ Snapshot Enabled”选

项,那么这个选项默认是启用的。

这个选项和后面的“ Save to snapshot”选项在下面的“使用镜像功能加快模拟器的

启动速度”中会讲到

2.使用镜像功能加快模拟器的启动速度

在前面的演示中,也许会发现 Android 模拟器重新启动的速度很慢,因此在 ADT r9 版

之后,新增了一个保存和恢复模拟器状态的镜像功能,用以加快模拟器重启的速度。镜像功

能的原理是将整个模拟器进程中的内存保存到硬盘中,从镜像恢复的过程实际上是将原先保

存在硬盘中的内存文件恢复到模拟器进程的内存中。因此在镜像恢复过程中,由于跳过了模

拟器启动和初始化的步骤,使启动速度变得很快;然而在关闭模拟器的时候,又因为需要保

存内存到硬盘中,关闭模拟器进程的过程会比不使用镜像功能时长一点。Android 官方博客

上说,这个功能并没有得到非常完整的测试,之所以会发布,是因为已经足够日常使用了,

因此要小心使用该功能。

1)首先需要编辑模拟器配置以启用该功能,启动 AVD Manager,在模拟器列表中选择

要设置的模拟器,并单击“Edit”按钮编辑它。

2)在“ Edit Android Virtual Device (AVD)”对话框中找到“ Snapshot”一栏并勾选

“ Enabled”复选框,单击“ Edit AVD”按钮保存设置,这样就为模拟器启用了镜像功能,

(续)

Page 16: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探16

如图 1-22 所示。

图 1-22 编辑模拟器设置

3)在 AVD Manager 窗口上选择刚刚编辑过的模拟器并单击“ Start…”按钮,这时可以

看到“ Launch from snapshot”和“ Save to snapshot”两个选项默认已经勾选,分别代表从

镜像中恢复模拟器状态和将模拟器状态保存到镜像中,如图 1-23 所示。

4)这时再启动几次模拟器,就会发现启动速度比

原先快了不少,因为已经把启动过程省略了。

在启用镜像功能后,还要注意下面几点。

如果要重启模拟器,也就是执行模拟器的启动 ❏

和初始化过程,需要在“Launch Opitons”对话

框中勾掉“ Launch from snapshot”复选框,这

时再单击“ Launch”按钮就不是从镜像中恢复

模拟器了,而是从头开始启动模拟器。

从镜像恢复后,模拟器大概需要 8 秒左右的时 ❏

间,将时间从原来镜像中的时间修正为当前时间。

有些模拟器可能不会在镜像中保存一些设置, ❏

例如信号强度设置,因此在模拟器从镜像中恢

复后,信号强度就被设置为默认值了。 图 1-23 使用镜像功能快速启动模拟器

Page 17: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 17

3.通过命令行创建

在大规模自动化测试中,通过图形界面一个个单独地去创建模拟器显然费时费力,因此

AVD Manager 也提供了命令行界面以便将创建模拟器的过程集成到自动化测试中,这样做

的另一个好处是,其他 IDE 也可以通过命令行创建模拟器。

在 Android 中,AVD Manager 的图形界面和命令行界面均由同一个程序 android 创建,

所不同的是,如果向 android 传递一个 avd 参数,如下:

$ android avd

则会启动 AVD Manager 的图形界面,使用其他参数则通过命令行界面。在本节我们通

过命令行界面再创建一个与前面相同的模拟器。

1)在虚拟机中按 ALT + F2 组合键,并输入“gnome-terminal”打开命令行。

2)在创建模拟器之前,需要指明模拟器的 Android 系统版本,在 Android SDK 工具包

中,每个 Android 系统都被分配了一个标识号,这个标识号可以通过“ android list targets”查看。在虚拟机中查看到的输出如代码清单 1-2 所示。

代码清单 1-2 列出机器上安装的可用 Android 系统版本的命令

student@android-student:~$ android list targetsAvailable Android targets:----------id: 1 or "android-8" Name: Android 2.2 Type: Platform API level: 8 Revision: 3 Skins: HVGA, WQVGA432, WQVGA400, WVGA800 (default), QVGA, WVGA854 ABIs : armeabi----------......----------id: 4 or "Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8" Name: GALAXY Tab Addon Type: Add-On Vendor: Samsung Electronics Co., Ltd. Revision: 1 Based on Android 2.2 (API level 8) Skins: WVGA854, WQVGA400, GALAXY Tab (default), HVGA, WQVGA432, QVGA, WVGA800 ABIs : armeabi......

在上面输出的第一部分中,id: 1 表示 Android 2.2 这个版本的标识号是 1,后面创建

Android 2.2 的模拟器时,需要用到这个值。Type: Platform 表明这是一个标准的 Android 版

本,没有外挂任何其他组件。而在输出的第二部中,Type 的值是 Add-On,表明这是一个其

他 Android 设备厂商定制的版本,附有一些额外的组件。

关于 target Id 这个值,需要说明的是,这个值与 Android 系统的版本号没有任何关系,

Page 18: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探18

在不同的宿主系统下,相同版本的 Android 系统的 target Id 有可能是不一样的,因此在使用

命令行创建模拟器之前,一定要执行上面的命令确认指定的 Android 系统的 target Id。3)在命令行中创建模拟器的命令格式是:android create avd-n < 模拟器名称 >-t < 目标

Android 系统标识号 >[-< 选项 >< 选项的值 >] …。与前面一样,创建一个 Android 2.2 系统

的模拟器,并把模拟器命名为“Android22”,代码如代码清单 1-3 所示。

代码清单 1-3 创建模拟器命令

student@android-student:~$ android create avd-n Android22-t 1Auto-selecting single ABI armeabiAndroid 2.2 is a basic Android platform.Do you wish to create a custom hardware profi le [no]

4)如果选择的目标 Android 系统是一个标准 Android 系统,即步骤 2)中输出类型为

“ Type: platform”的系统,那么下一步 Android 工具会询问硬件配置情况。如果需要定制一

些硬件配置,那么输入“ yes”并设置相应的值,这里使的是用默认的硬件配置,因此直接

按回车,默认选择选项“no”。

Do you wish to create a custom hardware profi le [no]noCreated AVD 'Android22' based on Android 2.2, ARM (armeabi) processor,with the following hardware confi g:hw.lcd.density=240vm.heapSize=24

5)稍等片刻,一个新的模拟器就创建好了,可以用 android 程序列出当前系统中已经

创建的模拟器:

$ ~/android-sdk/tools/android list avd

android 程序会扫描当前登录用户目录的 .android 隐藏文件夹,列出其 avd 目录中的所

有现有模拟器,针对每个模拟器打印类似代码清单 1-4 的输出。

代码清单 1-4 打印模拟器列表命令

student@android-student:~$ android list avdAvailable Android Virtual Devices: Name: Android22 Path: /home/student/.android/avd/Android22.avd Target: Android 2.2 (API level 8) ABI: armeabi Skin: WVGA800

上面的输出打印了模拟器的一些基本设置,例如模拟器在宿主机上的文件位置,模拟

器使用的 Android 系统版本号,是否启用了镜像功能(没有启用镜像则不会显示镜像的设

置)等。

android 命令在宿主机上创建一个专用的文件夹来存放模拟器的信息,包括模拟器的配

Page 19: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 19

置文件、用户数据以及虚拟 SD 卡等。这个文件夹并不包含模拟器使用的 Android 系统文

件,而是通过在配置文件中指明目标系统标示号,这样模拟器启动时会自动从 Android 开发

工具包中加载系统镜像。

android 命令还在目录 .android/avd/ 下为新的模拟器创建以模拟器名称命名的 .ini 文件,

在上例中文件名是 Android22.ini,该文件指明了模拟器配置文件的保存地址。

在 Linux 或 Mac 系 统 中, 模 拟 器 的 配 置 文 件 夹 默 认 放 在~ /.android/avd/ 中, 在

Windows XP 系 统 中, 默 认 存 放 在 C:\Documents and Settings\<user>\.android\ 中, 而 在

Windows Vista/7 中放在 C:\Users\<user>\.android\ 下。如果要指定一个不同的路径,可以在

创建模拟器的命令后加上 -p < 路径 > 参数,例如:

$ android create avd-n my_android1.5 -t 2 -p 其他路径

一个 Android 虚拟设备——AVD(Android Virtual Device)是一个包含了真机设备的

硬件和软件配置信息的模拟器,在本书中,简称它为模拟器。既可以通过图形化的 AVD Manager 来创建和启动模拟器,也可以在命令行中创建、管理和启动模拟器。无论是通过图

形还是命令行界面,在一台宿主机上可以同时创建和启动任意数量的模拟器。

一个 AVD 由下面这些部分构成:

硬件配置,定义了要模拟的硬件功能。例如,可以指定是否配有相机,是否配有物 ❏

理键盘,多大内存等选项。

软件配置,定义了模拟器上运行的 Android 平台的版本,既可以指定标准的 Android ❏

版本,也可以是定制的 Android 系统。

外观配置,可以定义模拟器使用的皮肤,通过皮肤控制模拟器的屏幕物理尺寸、外 ❏

观,还可以指定模拟器使用的虚拟 SD 卡。

在宿主机上的存储区域,模拟器上的用户数据(例如已安装的程序,个人设置等数 ❏

据)和虚拟 SD 卡都存储在这个地方。

以刚刚创建的模拟器“Android22”为例,其在虚拟机中的配置文件路径是:

student@student:~$ ls .android/avd/Android2.avd/cache.img hardware-qemu.ini userdata-qemu.imgcache.img.lock hardware-qemu.ini.lock userdata-qemu.img.lockconfi g.ini userdata.img

其中各个文件的作用如表 1-3 所示。

表 1-3 Android 模拟器文件夹中各文件的说明

文 件 名 说  明

hardware-qemu.ini硬件配置文件,可以通过下面的命令查看其内容:

$ gedit .android/avd/Android2.avd/hardware-qemu.ini

userdata-qemu.img 用来存放用户数据,可读写,Android 启动后将其挂载到 /data 文件夹上

userdata.img一般不使用 userdata.img,只有在使用 -wipe-data 参数启动模拟器的时候才会用 userdata.img

的内容覆盖 userdata-qemu.img

Page 20: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探20

文 件 名 说  明

cache.imgAndroid 启动后会将其挂载到 /cache 文件夹上,/cache 文件夹或者说分区是 Android 用来保

存经常访问的应用组件和数据的,系统每次重启时都会重建这个分区

*.lock这些文件都是临时文件,只有当模拟器启动时才会创建,模拟器关闭后就自动删除,它们的

目的系统用来防止在模拟器运行时,用户不小心通过模拟器管理器修改模拟器设置的

confi g.ini保存软件配置和外观配置文件,可以通过下面的命令查看其内容:

$ gedit .android/avd/Android2.avd/confi g.ini

可以手工编辑或通过模拟器管理器来修改模拟器的设置,具体方法在 1.4.3 中讲述

可以将新建好的模拟器移动到其他目录,由 -n 选项指明要移动的模拟器名称,由 -p选项指定移动后的目录,这个目录事先不能存在,由 android 创建。下面的示例就是将

名为 Android22 的模拟器配置文件夹移动到 /tmp/Android22 文件夹中,如代码清单 1-5所示。

代码清单 1-5 移动模拟器命令

student@android-student:~$ android move avd -n Android22 -p/tmp/Android22

AVD 'Android22' moved.

student@android-student:~$ android list avd

Available Android Virtual Devices:

Name: Android22

Path: /tmp/Android22

Target: Android 2.2 (API level 8)

ABI: armeabi

Skin: WVGA800

也可以重命名模拟器,下面的命令将名为 Android22 的模拟器重命名为 Android2,模拟

器新的名称由 -r 选项指定,如代码清单 1-6 所示。

代码清单 1-6 重命名模拟器的命令

student@android-student:~$ android move avd -n Android22 -r Android2

AVD 'Android22' moved.

student@android-student:~$ android list avd

Available Android Virtual Devices:

Name: Android2

Path: /tmp/Android22

Target: Android 2.2 (API level 8)

ABI: armeabi

Skin: WVGA800

执行下面的命令删除刚刚创建的模拟器,这样会将模拟器的配置文件、用户数据及虚拟

SD 卡等数据从硬盘上删除,如代码清单 1-7 所示。

(续)

Page 21: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 21

代码清单 1-7 删除模拟器的命令

student@android-student:~$ android delete avd -n Android2Deleting fi le /home/student/.android/avd/Android2.iniDeleting folder /tmp/Android22

AVD 'Android2' deleted.student@android-student:~$ android list avdAvailable Android Virtual Devices:

Android SDK 中的 android 命令有很多用处,本书不能一一介绍,有兴趣的读者可以通

过“ -h”参数查看其用法和子命令,如代码清单 1-8 所示。

代码清单 1-8 查看 android 命令的用法

student@student:~$ android-sdks/tools/android -h

Usage: android [global options] action [action options] Global options: -h --help : Help on a specifi c command.......-create avd : Creates a new Android Virtual Device.......

而使用“android –h < 子命令 >”可查看各个子命令的使用方法,如代码清单 1-9 所示。

代码清单 1-9 查看 android 子命令的用法

student@student:~$ android-sdks/tools/android -h create avd......Options:...... -n --name : Name of the new AVD. [required]......

1.4.3 启动模拟器

在创建好模拟器之后,可以使用 Android SDK 中的 emulator 命令启动模拟器。emulator命令只需要知道模拟器名称,通过“ -avd”参数指定要启动的模拟器名称就可以将其启动

它。通过下面的命令可以启动上一节创建的模拟器:

$ emulator –avd Android2&

在默认情况下,分配给模拟器的内存只有 128MB,这个内存在大部分情形下都显得太

小了。有几个方法可以修改模拟器的内存大小。

1)通过 emulator 的“ -memory”参数指定模拟器内存的大小(按 MB 计算)。这种修改

方式只影响本次启动的模拟器,在后续启动时,如果不指定“ -memory”参数,还是采用模

Page 22: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探22

拟器自身的设置:

$ emulator –avd Android2 –memory 512 &

在模拟器启动后,用代码清单 1-10 的命令验证内存大小。

代码清单 1-10 查看模拟器内存大小的命令

student@student:~$ adb -e shell cat /proc/meminfoMemTotal: 516452 kBMemFree: 394312 kBBuffers: 0 kB......VmallocChunk: 432132 kB

2)通过模拟器管理器修改“ device ram size”参数,如图 1-24 所示。启动模拟器管理

器的方法可参看 1.4.2 小节中“通过图形界面创建”的内容,这个做法是修改了模拟器自身

的设置,因此以后启动模拟器时都会采用这个内存设置。

3)修改模拟器配置文件夹的 confi g.ini 文件。在 1.4.2 小节的“通过命令行创建”中提

到,android 在创建模拟器时实际上是将模拟器的设置保存在模拟器配置文件夹下,其中有

一个 confi g.ini 文件,在其中添加或修改 hw.ramSize 参数即可改变模拟器的内存大小。这种

做法和上一步使用图形界面的方法的效果是相同的,如图 1-25 所示。

图 1-24 通过模拟器管理器修改模拟器内存大小 图 1-25 修改 confi g.ini 文件中内存大小的设置

除了修改内存大小外,还可以指定其他硬件参数,如表 1-4 所示。

表 1-4 创建模拟器可用的硬件参数

参  数 说  明

hw.ramSize 模拟器的物理内存大小,按兆字节计算,默认大小是“96”

hw.touchScreen 是否支持触摸屏,默认值是“yes”

hw.trackBall 是否有轨迹球(trackball),默认值是“yes”

hw.keyboard 是否有 QWERTY 柯蒂键盘,默认值是“yes”

hw.dPad 是否有 DPad 键(方向键),默认值是“yes”

hw.gsmModem 是否有 GSM 调制解调器,默认值是“yes”

hw.camera 是否有照相机设备,默认值是“no”

hw.camera.maxHorizontalPixels 照相机的最大水平像素值,默认值是“640”

hw.camera.maxVerticalPixels 照相机的最大垂直像素值,默认值是“480”

Page 23: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 23

参  数 说  明

hw.gps 是否有 GPS 仪,默认值是“yes”

hw.battery 是否需要电池,默认值是“yes”

hw.accelerometer 是否有重力加速仪,默认值是“yes”

hw.audioInput 是否支持录制音频,默认值是“yes”

hw.audioOutput 是否支持播放音频,默认值是“yes”

hw.sdCard 是否支持插入和移出虚拟 SD 卡,默认值是“yes”

disk.cachePartition 模拟器上是否使用 /cache 分区,默认值是“yes”

disk.cachePartition.size 缓存区的大小,默认值是“66MB”

hw.lcd.density 模拟器屏幕的密度,默认值是“160”

注意

在本书配套资源附带的虚拟机中,在模拟器启动后,可能会发生无法关闭模拟器的现

象,如果有类似问题,可参照下面的步骤杀死模拟器。

在终端上使用“ ps aux | grep emulator”列出模拟器进程,并用“ kill-9 < 进程 ID>”杀

死模拟器进程,例如杀死模拟器进程 ID 是“3333”的模拟器进程的过程如下:

student@student:~$ ps aux | grep emulatorstudent   3333 33.8 9.3 352112 193604 pts/0 Sl+ 18:31 2:05 /home/student/

android-sdks/tools//emulator-arm-avd Android2

student 3374 0.0 0.0 5808 840 pts/2 S+ 18:37 0:00 grep--

color=auto emulator

student@student:~$ kill -9 3333

1.4.4 连接模拟器

在模拟器启动后,可以随时按需要修改正在运行中的模拟器设置。在模拟器启动之后,

打开了一个网络套接字(socket)端口与宿主机通信,一些 Android 开发工具包中的工具就

是通过这个端口与模拟器交互的,我们也可以通过 telnet 程序操控模拟器。

在宿主机上可以同时启动多个模拟器,每个模拟器都会新开一个端口来与宿主机上的开

发工具通信,这个端口号显示在模拟器进程的标题栏上,如图 1-26 所示,这个模拟器和宿

主机通信的端口号是 5554。在宿主机上打开一个终端窗口,并执行下面命令连接到模拟

器的控制端口:

$ telnet localhost 5554

在连接成功后,模拟器会回显一些信息,用以提示操控命令,如代码清单 1-11 所示。

代码清单 1-11 使用 telnet 连接控制模拟器的命令

student@ubuntu:~$ telnet localhost 5554

图 1-26 模拟器的端口号

(续)

Page 24: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探24

Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.Android Console: type 'help' for a list of commands

输入“help”命令显示所有可用的命令:

help

Android console command help:

help|h|? print a list of commands

event simulate hardware events

geo Geo-location commands

gsm GSM related commands

cdma CDMA related commands

kill kill the emulator instance

network manage network settings

power power related commands

quit|exit quit control session

redir manage port redirections

sms SMS related commands

avd control virtual device execution

window manage emulator window

qemu QEMU-specifi c commands

sensor manage emulator sensors

要查看某个命令的详细帮助,可以执行“help < 命令名 >”查看。

例如,要动态修改正在运行的模拟器的大小比例,可以执行下面命令将模拟器尺寸缩小

到原来的四分之三:

window scale 0.75

最后输入“quit”或“exit”命令退出模拟器控制台:

quitConnection closed by foreign host.

1.4.5 连接手机

开发 Android 应用很重要的一点就是要在真机上实际测试,一方面有些功能在模拟器上

是无法测试的,必须在真机上测试,例如重力加速器;另一方面有些多手指手势的测试也很

难在模拟器上实施。而且 Android 系统的模拟器与 iOS 系统的模拟器不同,Android 模拟器

的运行速度远远慢于真机,因此必须准备一台测试用的真机。在真机上开发和调试 Android应用的方法和模拟器上是一致的,设置真机开发环境需要执行下面这些步骤:

(1)在应用的 Manifest 文件中声明应用是可调试的

(2)打开应用的调试支持

Page 25: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 25

对于通过 Eclipse 创建的应用,可以省略这一步,在 Eclipse IDE 中启动应用时,会自动

打开应用的调试支持。

在 AndroidManifest.xml 文件的 <application> 元素中,添加 android:debuggable=“ true”这个属性就为应用打开调试支持。代码清单 1-12 是一个启用调试支持的 AndroidManifest.xml 示例。

代码清单 1-12 在 AndroidManifest.xml 中启用真机调试

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.hzbook.android.test.chapter1" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" /><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />

<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cc.iqa.demo.multiplatformdemoproject" />

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-fi lter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-fi lter> </activity> ...... <uses-library android:name="android.test.runner" /> </application>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission></manifest>

注意

在应用开发过程中,要在 manifest 文件中手动启用调试支持,最好在应用发布前关闭调

试支持,因为一个已发布的应用是不应该可以被调试的。

Page 26: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探26

(3)打开手机的“USB 调试”功能

在 Android 4.0 之前的设备上,依次选择“设置”、“应用程序”、“开发”,然后勾选“USB调试”;在 Android 4.0 的设备上,“ USB 调试”选项位于“设

置 -> 开发”子菜单项中,如图 1-27 所示。

(4)设置宿主机系统以侦测到开发设备

如果是在 Windows 宿主机上进行 Android 应用开发,需要

为 adb 程序安装一个 USB 驱动,具体方法如下:

1)用 USB 数据线将设备与 Windows 机器连接,第一次连

接时提示发现新硬件,这时 Windows 弹出尝试为设备安装驱动

程序的对话框,选择“从列表或指定位置安装(高级)”单选框并单击“下一步”按钮,如

图 1-28 所示。

2)在接下来的对话框中选择“在这些位置上搜索最佳驱动程序”单选框,勾选“在搜

索中包括这个位置”复选框并输入 Android SDK 中的 usb_driver 文件夹的路径,这里输入

的是“C:\eclipse-java-juno-win32\android-sdk\extras\google\usb_driver”,然后单击“下一步”

按钮搜索并安装驱动,如图 1-29 所示。

图 1-28 在 Windows 上安装 Android 设备驱动程序 图 1-29 选择 Android 驱动文件路径

3)可能会出现好几个需要安装驱动的地方,要一个不少地全部安装成功。在搜索的时

候可能会提示需要某个文件,也不能跳过,一般来说可以在 Windows 安装目录的“system32\drivers”(如“C:\WINDOWS\system32\drivers”)文件夹中找到相应的文件。

4)在驱动安装完毕后,可以使用设备管理器或 adb devices 命令查看系统是否成功识别

设备,如图 1-30 所示。

图 1-30 在 Windows 上验证 Android 设备驱动正确安装

图 1-27 启用手机 USB 调试

Page 27: 1 Android 自动化测试初探

1.4 搭建自动化开发环境 ◆ 27

注意

如果在 Android SDK 的安装目录下没有找到 usb_driver 文件夹,即 android-sdk\extras\google\usb_driver 不存在,这说明在安装 Android SDK 时,没有安装 usb_driver 这个包。 需要打开 Android SDK Manager,找到“ Extras” 并勾选“ Google USB Driver”复选框,将其

安装,如图 1-31 所示。但是 Google 的驱动包并不支持有些设备,例如,笔者的三星手机,

需要下载三星的官方驱动包才能使用 Google 的驱动包。

图 1-31 安装 Google USB 驱动

如果是 Mac OS X 宿主机,可以即插即用,省略该步骤。

如果是 Ubuntu Linux 宿主机,需要为开发用的设备类型添加一个包含 USB 设置的 udev规则文件。每个设备厂商都有一个唯一的供应商 ID(vendor ID)标识,这个标识通过在规

则文件中设置 ATTR{idVendor} 属性指定。以三星手机为例,在 Ubuntu Linux(配套资源中

的虚拟机)上设置设备即插即用侦测的方法如下:

1)将手机通过 USB 连接到电脑。

2)依次单击 VirtualBox 菜单栏中的“设备”、“分配 USB 设备”,并勾选连接到电脑上

的手机,如图 1-32 所示。

图 1-32 将 Android 设备连接到虚拟机

Page 28: 1 Android 自动化测试初探

◆ 第 1 章 Android 自动化测试初探28

3)以 root 的身份编辑文件 /etc/udev/rules.d/51-android.rules,在新装系统中,默认是没

有这个文件的,需要先创建它。使用下面的命令创建并编辑 51-android.rules 文件。

$ sudo gedit /etc/udev/rules.d/51-android.rules

4)在 51-android.rules 文件中,为每个厂商的设备添加格式如下的一行规则:

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"

其中,供应商 ID“04e8”指明了是三星设备;MODE 的值表明具有读 / 写权限,

MODE 值的设置和 Linux chmod 命令类似;而 GROUP 定义了设备节点的所有人用户组。

5)然后执行命令启用规则:

$ sudo chmod a+r /etc/udev/rules.d/51-android.rules

6)将手机连接到 PC 的 USB 端口,执行命令 adb devices 验证设置是否正确:

student@android-student:~$ adb devices* daemon not running. starting it now on port 5037 ** daemon started successfully *List of devices attachedi50906d210fe0 device

如果设置正确,adb devices 会列出连到电脑上的设备的设备号(上面代码中加粗的部分)。

设置好设备以后,在 Eclipse 中使用设备运行和调试应用的方式和模拟器完全一样,如

果电脑上同时连接多个设备,或者连接设备的同时还运行有模拟器,Eclipse 会弹出一个

“ Device Chooser”对话框,其中列出可用的模拟器和设备,选择需要的设备或模拟器来运

行和调试应用,如图 1-33 所示。

图 1-33 Android 设备选择工具

Android 官方网站(http://developer.android.com/tools/device.html#VendorIds)上有最新

Page 29: 1 Android 自动化测试初探

1.5 本章小结 ◆ 29

的完整的供应商 ID 列表,在本书写作时,完整列表如表 1-5 所示。

表 1-5 Android 设备的供应商 ID 列表

设备厂商(Company)USB 供应商 ID

(USB Vendor ID)设备厂商(Company)

USB 供应商 ID

(USB Vendor ID)

Acer(宏基) 502 NEC 409

ASUS(华硕) 0b05 Nook 2080

Dell(戴尔) 413c Nvidia 955

Foxconn 489 OTGV 2257

Fujitsu 04c5 Pantech 10a9

Fujitsu Toshiba 04c5 Pegatron 1d4d

Garmin-Asus 091e Philips(飞利浦) 471

Google(谷歌) 18d1 PMC-Sierra 04da

Hisense 109b Qualcomm 05c6

HTC 0bb4 SK Telesys 1f53

Huawei(华为) 12d1 Samsung(三星) 4E+08

K-Touch 24000 Sharp 04dd

KT Tech 2116 Sony(索尼) 054c

Kyocera 482 Sony Ericsson(索尼爱立信) 0fce

Lenovo(联想) 17ef Teleepoch 2340

LG 1004 Toshiba(东芝) 930

Motorola(摩托罗拉) 22b8 ZTE(中兴) 19d2

1.5 本章小结

这一章,我们讲解了设置 Android 开发环境、启动模拟器,以及准备开发设备等自动

化开发的必要步骤,实际上这些步骤与开发一个正常的 Android 应用的准备步骤是完全

一样的。在第3章,我们将看到,在 Android 系统上,Android 自动化测试几乎就是一个

Android 应用,因此开发方法也很类似。不过 Android 自动化测试通过复用 JUnit 技术,极

大地缩短了测试人员的学习时间。接下来就来了解使用了 JUnit 编写自动化测试。