基于
Perfecto mobile cloud 的移动端自动化测试实践
本文将介绍 Pefecto mobile cloud 在移动端自动化测试的应用。 Pefecto 将真实移动设备放到
cloud 端 , 并提供通过 web/Eclipse 插件的形式进行访问与测试。同时,Pefecto
开放了基于 selenium 的第三方 API:Mobile WebDriver,支持自动化测试人员通过
Eclipse 访问 Perfecto 上的真机设备,通过 Mobile WebDriver 远程识别与调用被测应用,快速实现自动化,并与
RQM 结合实现对 devops 的支持。
Perfecto Mobile 简介
移动设备上的测试需求随着移动应用的普及被越来越重视,但是,移动端应用的测试目前仍然存在着很多问题。跨平台,多设备,多型号。不同的测试环境涉及到很多复杂性,为解决这些问题,通常需要花费很多的时间与成本。而许多依赖模拟器进行的测试,因模拟器与真实设备的差异,仍然存在许多不足,而全部使用真实带来的成本又过高。为解决这一问题,
Perfecto Mobile 通过远程服务的模式,为测试人员提供了全覆盖的真实移动设备,并通过浏览器
/IDE 插件等形式提供了用户对设备的快速访问。
Perfecto Mobile 主要提供的功能如下:
分布式,远程功能测试:以交互方式进行远程手动测试,保证移动应用程序功能正确性。
真实设备上的自动化测试:通过 Perfecto Mobile 提供的自动化测试 API,开发用户测试脚本,实现移动设备上的自动化测试。
移动应用程序的实时监控:在真实的设备上监控复杂用户场景。
真实设备上的性能测试:在客户端和服务器端发现及早发现性能瓶颈并优化用户体检。
Perfecto Mobile 在移动端功能测试应用简介
Perfecto Mobile 的分布式的远程功能测试通过浏览器访问实现。用户通过在浏览器输入 Perfecto
Mobile 地址打开首页 , 选择测试相应的移动设备,就可以简单快速的进行测试。下文将简单介绍测试人员如何在
Perfecto 平台开始功能测试。
软件要求:浏览器:IE, Firefox,Chrome;Flash player(要求版本 11 及以上)
打开 Perfecto 首页并登录:http://mobilecloud.perfectomobile.com,账号及密码可以在网站申请注册。
图 1. Perfecto 登录
登录后点击“Select Device”, 即可显示所有可供测试的移动设备,所有标记为 Avaliable
的设备都可供使用。
图 2. 设备列表
选定需要测试的设备如 iPad 2,通过右下角菜单,可选择对该设备进行预定,立即锁定或者打开查看操作。预定设备时,用户需要设置起始时间,来达到在该时间段内对设备的独占使用。
图 3. 操作菜单
图 4. 预定设备
打开后的设备如下图所示,该设备为真实的 iPad。测试人员可根据测试需求在该设备上进行测试操作。测试完成后,测试人员可选择释放该设备或延长使用时间以便进行更多的测试。
图 5. 设备查看
左边的工具栏为用户提供了各种快捷操作。例如:用户可通过”Open URL”按钮直接在 ipad 的浏览器端打开
google 页面如下图所示。另外 Record 按钮提供用户录制测试场景,Test flow 可直接打开用户预录制或定义的测试场景。为测试人员带来极大的操作便利。
图 6. 工具栏
Perfecto Mobile 在移动端自动化测试应用
Perfecto 对于手动功能测试,可以说只是为用户提供了测试设备,及一部分快捷操作,Perfecto
在自动化测试上的支持则是大大减少了自动化测试人员的工作量。
一般来说,目前移动端最主要的 2 大操作系统平台为:Andriod 和 iOS。对于测试人员来说,Andriod
真机测试相对简单,可以在测试人员的工作电脑上编写测试脚本,之后通过移动端自动化测试工具调用移动设备直接进行测试,而
iOS 的真机测试则有相当多的限制条件。以测试工具 appium 为例,为满足真机的自动化测试,用户需要准备如下条件:1)Mac
真机与 xcode 环境 2)被测设备 3)apple 开发者帐号 4)测试工具 appium 的在客户端和服务端的安装。以上限制都为自动化测试人员带来了相当的麻烦与工作量,尤其是在测试开始初期,由于各种设备或帐号申请的不到位,将很大程度的延迟或阻碍测试进行。
Perfecto Mobile 提供了开放的 API,测试人员只需调用这些 API,就能方便而快速的实现测试脚本的编写与运行,极大的简化了测试环境搭建与准备,提高了测试效率。
Perfecto 的 API 利用现有的自动化测试流程,通过扩展各流行的开源及商业自动化测试工具,进行移动端应用测试的支持,并且这种持续集成不需要额外的技能学习或其他成本投入。
目前 Perfecto 支持的语言和测试框架如下图:
图 7. 支持的语言和平台
介于 Perfecto 的多平台、多语言、多框架支持,本文自动化实践将只针对 Selenium +Java
+Eclipse 的实现进行展开。
Perfecto Mobile 对移动端自动化的支持是基于 Selenium 扩展出了 Mobile Cloud
WebDriver。Selenium 被广泛应用于 web 端自动化测试领域,作为一款功能强大、使用方便、轻量级的开源自动化测试工具,早已被很多
web 自动化测试人员所熟知。而 Web Driver 是 Selenium 在 1.0 基础上进行改进后用于
web 自动化测试的工具,相比 selenium1.0 更简单,有更丰富和利于维护的 API,可以被各种测试框架直接调用而不需要进行其他配置。Perfecto
在此基础上进行了 mobile 端的扩展,实现了主要的 Selenium 接口,整合并集成 Selenium
的概念与实践。
用户可以通过 Perfecto 提供的 Mobile Cloud For Eclipse 插件进行测试脚本的编写与执行,并通过与测试框架,如
TestNG, JUnit 等集成实现对测试的管理。
下文将阐述 Perfecto Mobile 的 Eclipse 插件如何快速建立一个自动化测试工程并开始第一个脚本的编写。
支持平台
Windows 7
Java: JRE 7, JRE 8
Eclipse: Eclipse Luna, Eclipse Kepler
Macintosh v10.9
Java: JRE 7
Eclipse: Eclipse Luna
安装 MobileCloud Eclipse 插件
下载安装 Eclipse Luna, 打开 Help->Install New Software
图 8. Help->Install New Software
点击 Add
图 9. 添加 Mobile Cloud 安装
输入以下 URL 并点击 ok:http://mobilecloud.perfectomobile.com/tools/eclipse/site
图 10. 安装 URL
选择 Mobile Cloud 并点击下一步
图 11. 开始安装
以下步骤全部按照默认设置,点击下一步直到完成。
安装完成后打开 Eclipse 的 Mobile Cloud 视图,在 Mobile Cloud 面板上,可以看到在
web 端已经预定的设备。测试人员可以开始在 Eclipse 端进行脚本编写。
图 12. 安装后 dashboard
创建 MobileCloud 项目
File->New->Project, 选择 MobileCloud Project.
图 13. 新建项目
在下一步输入项目名称与路径后,输入 Mobile Cloud 注册时使用的用户名和密码登录。
图 14. 用户登录信息
MobileCloud 项目视图
MobileCloud 项目创建完成后,将自动生成 2 个 Java 文件:MobileTest.java
和 MobileRemoteTest.java 以作为所有测试类的模板。自动化测试人员可以在该模板的基础上进行脚本编写
: 在 Main 函数写入测试步骤或调整测试类模板,再进行脚本编写。
图 15. 脚本模板
测试脚本示例
测试项目建立起来后,下面可以正式开始测试脚本编写。以浏览器打开 google 首页并搜索 perfecto
为例:
设置设备操作系统及版本,并通过 webdriver 提供的接口实例化该设备。
图 16. 设备初始化
在输入框输入”Perfecto”并开始搜索。
打开浏览器,并输入 google 地址 :
IMobileWebDriver domDriver = device.getDOMDriver(MobileBrowserType.OS); domDriver.get("http://www.google.com"); |
通过 API 查找输入框元素,并输入需要搜索的关键字”Perfecto”
WebElement searchElement = domDriver.findElement(By.name("searchText")); searchElement.sendKeys("Perfecto"); |
点击 search 按钮
WebElement textElement = domDriver.findElement(By.linkText("Search")); textElement.click(); |
验证返回结果是否正确,如果不正确则输出错误日志
IMobileWebDriver visualDriver = device.getVisualDriver(); visualDriver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS); try{ visualDriver.findElement(By.linkText("Perfecto")); } catch(NoSuchElementException e) { System.out.println("'Perfecto' text not found"); throwe; } |
图 17. 用例步骤
测试结束,关闭实例并退出浏览器
图 18. 用例结束
元素识别
自动化测试工具通过提供元素识别与操作实现对自动化测试的支持。Perfecto Mobile 也提供了 Object
Spy 进行元素识别,点击 Open 按钮,打开 spy 工具,将工具放到相应的元素上就可以进行元素识别。
图 19. 脚本编辑工具栏
脚本录制与回放
Perfecto Mobile 对脚本的支持,除了手动编写脚本模式外,还支持直接进行脚本的录制。 点击工具栏上的录制按钮,Perfecto
开始对进行脚本录制。录制完后的脚本会生成相应的 Java 代码,用户可以根据需要进行脚本重构,增加脚本的可读性与可维护性。
图 20. 脚本录制
PerfectoMobile 相比于真机测试的优势
Perfecto Mobile 相对于真机测试拥有明显的优势。
它让身处世界上任何地方的开发者和测试人员只需要通过网络就能随时随地访问设备测试应用程序,而不需要购买大量设备来覆盖市场上的不同手机不同型号。
为自动化测试人员提供丰富的 API,极大简化了自动化人员写脚本的工作量。
自动化的跨平台,多语言支持。
Perfecto Mobile 结合 RQM 实现对 DevOps 的支持
自动化测试是 DevOps 持续交付实践中的一个重要部分, 本章将介绍在编写完自动化测试脚本后如何安装、管理、维护和触发这些脚本。
下图展示了 DevOps 的一个 CLM 模型,IBM RQM(Rational Quality Manager)
是一个规划测试和管理测试结果的协作式中心,自动化测试工作则主要通过与 RQM 集成来完成。每个自动化测试脚本将与
RQM 上的一个测试用例相关联,并通过 RQM 来启动整个测试集。
图 21. Perfecto DevOps
JUnit Selenium Adapter 配置
MobileCloud 可与 JUnit 进行集成,之后再通过 JunitSelenium Adapter
与 RQM 进行集成。在此之前,需要先进行 Adapter 配置,以使 RQM 能获取测试机上的脚本。
下载 RQMJUnitSeleniumAdapter.zip 并解压,将其中的
<...>/RQM-Extras-JUnitSeleniumAdapter/selenium.properties
文件及所有需要的 selenium jar 文件放到脚本所在机器 classpath 下。
打开 cmd,进入 JUnit Selenium Adapter 目录,通过 C:\start.bat
-repository
https://qmserver:port/qm -user userid -password password
[-adapterName adapter-name] [-projectArea project area]
[-sleepTime sleep time] [-configFile configuration file]
启动 Adapter.
关联测试脚本与用例
由 Perfecto Mobile 生成的测试脚本,首先需要通过 Adapter 读取到 RQM。步骤如下,点击
RQM 的创建测试用例,选择 JUnit Selenium 类型
图 22. RQM 创建 selenium 脚本
输入正确的测试类名与路径,并点击保存。
图 23. 添加脚本路径
打开需要关联的用例,选择关联测试脚本,选择新建的测试脚本并建立关联。
图 24. 关联脚本与用例
执行测试用例并返回测试结果
依次关联所有需要关联的测试用例与脚本后,按照需求返回测试用例或测试计划页面,填写相应参数并开始执行测试用例,此时
RQM 会根据之前在测试脚本中填写的路径调用执行测试脚本并最终返回测试结果。
图 25. 执行用例
通过与 RQM 的集成,Perfecto Mobile 在测试阶段及时执行测试并返回结果,有效的实现了对
DevOps 的支持。
结束语
本文介绍了 Perfecto Mobile 通过提供远程服务方式,对移动端手动 / 自动功能测试的支持,尤其是在自动化测试方面,Perfecto
Mobile 提供的测试 API 扩展自 Selenium, 测试人员无须额外的学习代价也能快速上手,简化移动端测试流程,提高测试效率。其与
RQM 通过 JUnit 的集成则能天然提供对 DevOps 支持,在移动测试领域为测试人员带来了极大的好处与受益。
|