SlideShare a Scribd company logo
Appium 移动测试框架
Weibo : seveniruby
Agilean 测试咨询师
更新日期 : 2014-3-6
Testerhome.com Appium 交流 QQ 群 : 315508626
官方网站

2
Appium 项目介绍
维护情况
• 由 SauceLabs 支持
• Saucelabs 是海外一家业界领先的测试产品
公司 , 有成熟的企业测试解决方案和基于
appium 的云产品
• 在 Google 举办的 GATC2013 大会上有过详
细介绍
• 2013 年 12 月 Selenium 官方组织宣布放弃
自己的 mobile 项目 , 改而支持 Appium
Selendroid iosdriver 框架
理念
•
•
•
•

1.
2.
3.
4.

03/08/14

测试最终发布的 app
用任何语言和任何框架来写测试
使用标准规范的自动化 API
构建繁荣的开源交流氛围
目前 mobile 自动化的方案
业界 top 框架综合对比
百度 Cafe 框架
阿里 Athrun
Cafe vs Athrun
• Athrun 项目基本已经停滞
• 阿里有了更好的移动测试框架 sword
• 暂未开源
•
•
•
•

Cafe 开源技术和理念都很好
其他公司反馈效果好
开放性好 , 支持与 appium 的集成
实用效果经过了 MTC 的验证

03/08/14
相比之下 Appium 的优势
•
•
•
•

多种开发模式支持 native hybrid webview
多平台支持 android ios firefoxos
跨语言 java python ruby nodejs php
支持跨 app, 可以在多个 app 之间交互

• 不依赖源代码 , 可以测试第三方应用 , 比如
测试微信服务号
跨语言跨测试框架
• Language:
• Java Python Ruby PHP NodeJs ObjectC Perl
• TDD: Xunit
• BDD: Rspec Cucumber
• ATDD: RobotFramework

03/08/14
多平台支持

03/08/14
开源硬件 Arduino 支持

03/08/14
基于 Android 的测试框架
Appium 在 Android 上的���构
Appium 在 iOS 上的架构
Appium 架构
• Android 上使用了 instrumentation 和
uiautomator 两套技术
• Appium 在 4.1 以上使用 uiautomator
• 4.1 以下使用 selendroid
• iOS 使用 uiautomation
• 支持 firefox
Appium 的使用
• 安装 nodejs
• 使用 npm 安装 appium
• Appium 启动
基础流程
•
•
•
•

启动 appium
连接设备或者模拟器
编写你的测试用例
指定 webdriver 的 caps 配置

• Run it

03/08/14
Remote webdriver 调用
视频演示
•请上 testerhome 的视频站
•

http://video.testerhome.com
Appium 的加载流程
• 调用 android adb 完成基本的系统操作
• 向 android 上部署 bootstrap.jar 包并启动
• Forward android 的端口到 pc 机器上
• Pc 上监听端口接受请求,使用 webdriver 协议
• 分析命令并转通过 forward 的端口发给
bootstrap.jar
• Bootstrap.jar 接受请求并把命令发给 uiautomator
或者插桩体系
一个 android 上的操作流程
• 1. Webdriver 的脚本执行 Element.send_keys
• 2. 发送到 remote webdriver
/wd/hub/session/xxx/keys
• 3. pc 处理请求并转发给 android 和 iphone
• 4. Bootstrap.jar 调用 uiautomator
• 5. Uiautomator 调用 settext 方法
Appium 设计理念
•
•
•
•

CS 架构 appium 作为服务器
使用标准 WebDriver 协议交互
元素定位使用统一的 XPath 抽象定位
底层调用各自平台的自动化技术

• 类似 selenium 的架构
Webdriver 协议
使用 webdriver 协议,成熟标准,应用广泛
它即将成为 w3c 业界标准
跨语言 , 不限制测试框架
Remote WebDriver 方式支持云测和集群模
式
• PC 端运行可以支持各种 runtimes ,不受限
手机环境
•
•
•
•
Appium 支持主流语言
webdriver 的 capabilities 配置
•
•
•
•
•

App: 本地路径或者网络下载地址
browserName: 兼容 selenium, 并不使用
Device: ios android firefoxos
Version: Android API version, iOS Version
Launch: 是否让 appium 自动启动 app
Capabilities 的配置例子
• Android2.3
• Android4.2
• iOS6.1
演示代码
元素定位
Android 和 iOS 的原生控件以及 webview 控件映射为特定的命名 , 比
如把所有平台的按钮映射为 button 元素
• 把当前的结构树映射为 html 文档
• 通过 xpath 来选择元素
•

•
•
•
•

多种定位方式
Name: id , label text content-desc resource-id
TagName: component type
XPath

•

定位元素建议采用 (Screen Object)PageObject 模式,使用 XPath
Xpath 支持语法列表
•
•
•
•
•
•
•
•
•
•
•
•
•
•

//button
//button[last()]
//button[1]
/button
Button
//button/text/webview
//button[1]/text/webview[3]
//button[@name='hi there']
//button[@other_attr='hi there']
//list/button[@name="hi there"]
//button[contains(@other_attr, "hi")]
//*[contains(@text, 'agree')]
//*[@text='agree']
//frame//button

•

目前还不是完整的 xpath, appium1.0 会支持有全功能的 xpath 支持
Xpath 映射关系查询
Xpath 获取
•
•
•
•

Appium inspector
Uiautomatorviewer
Uiautomator events
android 也可以使用 selendroid 的 inspector
Appium Inspector

03/08/14
Appium手机自动化测试 testerhome_bqcon版本
元素交互
•
•
•
•

Webdriver 已经支持
点击
输入
按键事件

•
•
•
•

Mobile 相关 :
拖动
划动
长按
点击与输入
长按操作代码
通过 execute_script 执行 mobile 方法
发送特殊 event
• 发送 ctrl+v
• driver.execute_script 'mobile: keyevent',
{'keycode'=>50, 'metastate'=>28672}
• 发送 v 字符
• driver.execute_script 'mobile: keyevent',
{'keycode'=>50}
• 具体的事件代码请参考各自平台的 event 文档
一个完整的例子
中文输入问题
• 两个解决方法 :
• 1. 安装 UTF7IME 输入法 , 并使用对应的
Java 库编码待输入中文
• 2. 使用复制粘贴方法 . 长按某个输入框 ,
并模拟 ctrl+v 的按键 , 别触发搜狗输入法 ,
搜狗输入法会拦截 ctr+v, 其他输入法没有
此类问题 .
Appium 的灵活扩展
• Appium 对 webdriver 协议进行了扩充
• 通过利用 execute_script 执行 mobie 操作
• 通过自身服务增加了一些处理命令,比如
安装 , 卸载 , 加载 app
• 也扩展支持一些平台专有的指令

• Webdriver 即将成为 W3C 标准
• Appium 在推动 webdrive 增强 mobile 特性
位置模拟演示
• 目前只支持 android 模拟器
android 覆盖率统计
• caps = { androidCoverage:
'com.example.pkg/com.example.pkg.instrume
ntation.MyInstrumentation' }
• mobile :endCoverage, intent:
'com.example.pkg.END_EMMA', path:
'/mnt/sdcard/coverage.ec'

03/08/14
多种架构支持

03/08/14
原生 , 混合 ,web
• 三种主流的 app 设计模式
• 原生 :
• 使用开发特定平台专用 app
•
•
•
•

混合 :
Phonegap 百度轻应用
使用 html5 技术开发
jquery mobile, sencha touch

• Webapp:
• 加载远程页面
混合模式的自动化
• iOS

• Android
Grid 模式

03/08/14
Appium 对 RobotFramework 的支
持
• Appium 支持 webdriver 协议
• 可以使用 RobotFramework 来设计测试用例
• 需要对 appium 目前的版本打补丁
• 已经提需求给官方 , 后续会更好的支持
• 我们也有意打造完全支持的商业版本 . 把
移动测试的难度降到最低
Robot 的测试用例演示
• 打开淘宝 , 输入小米手机并搜索
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
移动测试环境规划
• 私有移动测试云环境
• 针对 android ios 等各个主要版本的测试环
境
• 模拟器为主 , 应付日常测试需求
• 公共云服务
• 百度 MTC Testin Saucelabs
• 真机为主 , 可以测试更多场景 . 测试覆盖度
高
移动云测试
•
•
•
•

Saucelabs 提供了 appium 的在线云环境
提供虚拟机
提供运行时的截图和录像
脚本执行非常简单
国内移动云测平台
•
•
•
•
•

TestIn
提供商业服务 .
价格贵 .
服务好
技术中等

•
•
•
•
•

MTC
百度云计算计划的一部分
免费
没有商业服务
技术优秀

•
•

两者功能各有特色 , 可以去相关网站参考
限于篇幅 , 不做详细介绍
移动测试持续集成
• Appium 运行于 PC 端
• 支持 webdriver 协议和 Grid 模式
• 可以实现无缝的持续集成
Appium 的坑
•XPath 的支持有问题,并不是完全的 xpath 功能 , 在即将发布的
1.0 版本中会提供完全的支持
•不同实现存在细节差异
•一些 app 比如手机 qq 不允许简单的 am start ,需要提升权限 , 比
如让 appium 扩展支持 su
•Appium 长时间运行不太稳定 , 建议在���行测试前重启 appium
•更多坑请参见 github 上的 issue 列表和 TesterHome.com 上的帖子
展望 appium
• 架构非常优秀,扩展性很好,不会限制用户使用
特定的语言
• Selenium 官方组织宣布放弃自身 mobile 项目转而
支持 appium 等框架
• Saucelabs TestDroid 海外云服务平台已经支持
appium, 国内后续也可能会跟进
• 国内研究和使用 appium 的公司在逐渐增多
Appium 1.0 coming soon
• 与 selenium3 协议融合 , selenium 新版本将
支持 appium 的 api
• 提供定位 , 网速控制 , 电源等硬件访问 api
• 完整 xpath 支持
• 更多更完整的文档和教程
TesterHome 论坛
关于我们 :
致力于打造技术范的移动测试交流社区
国内最热门的移动测试交流社区 , 专注于 appium 和移动测试相关
topic 的研究
• 我们的关键词 Open Share Coding Geek Cool
•
•
•

公开的合伙人体系 : 对论坛有重大贡献的成员会被赠分成 .
商业回馈 : 论坛盈利后会根据每个人发帖情况进行分成 , 以鼓励成员
对知识的贡献
• 公益计划 : 论坛会拿出 2% 的营收捐赠壹基金 , 以尽我们的社会责任
•
•

•
•

创始人 : 恒温 , monkey
一个开源自运营的社区 + 新技术和创业项目孵化器

•

testerhome.com
我们的论坛
• Talk Is Cheap Show Me The Code
Appium手机自动化测试 testerhome_bqcon版本
与 appium 互动里程碑
•Done
•翻译了 appium 的文档
•补充了测试用例类型
•提交发现的 issue
•Doing
•改进 appium
•集成 cafe 到 appium
•增加问题定位功能
•支持 robot framework
•支持中文输入
•期待更多同学加入 appium 的支持和维护工作
新技术与创新项目孵化
•
•
•
•
•

在线服务 + 云测 :
录制建模与代码生成服务
在线自动遍历服务
在线问题定位
接口测试自动生成

• 众测 :
• 一种与 Testin 互补的众测模式
•
•
•
•

测试分析 :
监控与分析建模 (NewRelic 模式 )
专项问题发现和定位 ( 兼容性 , crash, 内存泄漏 , 非安全 api)
业务安全测试

03/08/14
03/08/14
测试理念
•
•
•
•
•

监控分析 ( 数据流 + 代码路径 )
录制建模
云测
众测
敏捷

• 目标 :
• 一种基于移动测试和快速功能验证的 NewRelic 在线服务
模式
• 有意合作或者投资请联系 weibo seveniruby
03/08/14
捐赠页面
• TesterHome 创始人 : 恒温
• https://me.alipay.com/testerhome
Thanks
• Q&A

• 感谢美团云提供云主机支持
• 感谢 TesterHome 论坛成员的分享和交流

More Related Content

Appium手机自动化测试 testerhome_bqcon版本