appium手机自动化测试 testerhome_bqcon版本
DESCRIPTION
testerhome.com 出品 在infoq上分享的版本TRANSCRIPT
Appium 移动测试框架
Weibo : sevenirubyAgilean 测试咨询师更新日期 : 2014-3-6
Testerhome.com Appium 交流 QQ 群 : 315508626
2
官方网站
Appium 项目介绍
维护情况• 由 SauceLabs 支持• Saucelabs 是海外一家业界领先的测试产品
公司 , 有成熟的企业测试解决方案和基于appium 的云产品
• 在 Google 举办的 GATC2013 大会上有过详细介绍
• 2013 年 12 月 Selenium 官方组织宣布放弃自己的 mobile 项目 , 改而支持 Appium Selendroid iosdriver 框架
理念• 1. 测试最终发布的 app• 2. 用任何语言和任何框架来写测试• 3. 使用标准规范的自动化 API• 4. 构建繁荣的开源交流氛围
23/4/13
目前 mobile 自动化的方案
业界 top 框架综合对比
百度 Cafe 框架
阿里 Athrun
23/4/13
Cafe vs Athrun
• Athrun 项目基本已经停滞• 阿里有了更好的移动测试框架 sword• 暂未开源
• Cafe 开源技术和理念都很好• 其他公司反馈效果好• 开放性好 , 支持与 appium 的集成• 实用效果经过了 MTC 的验证
相比之下 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
23/4/13
多平台支持
23/4/13
开源硬件 Arduino 支持
23/4/13
基于 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
23/4/13
Remote webdriver 调用
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
23/4/13
元素交互• 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覆盖率统计
23/4/13
• caps = { androidCoverage: 'com.example.pkg/com.example.pkg.instrumentation.MyInstrumentation' }
• mobile :endCoverage, intent: 'com.example.pkg.END_EMMA', path: '/mnt/sdcard/coverage.ec'
多种架构支持
23/4/13
原生 ,混合 ,web• 三种主流的 app 设计模式• 原生 : • 使用开发特定平台专用 app
• 混合 :• Phonegap 百度轻应用 • 使用 html5 技术开发• jquery mobile, sencha touch
• Webapp:• 加载远程页面
混合模式的自动化• iOS
• Android
Grid 模式
23/4/13
Appium 对 RobotFramework 的支持
• Appium 支持 webdriver 协议• 可以使用 RobotFramework 来设计测试用例
• 需要对 appium 目前的版本打补丁• 已经提需求给官方 , 后续会更好的支持
• 我们也有意打造完全支持的商业版本 . 把移动测试的难度降到最低
Robot 的测试用例演示• 打开淘宝 , 输入小米手机并搜索
移动测试环境规划• 私有移动测试云环境• 针对 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 互动里程碑•Done•翻译了 appium 的文档•补充了测试用例类型•提交发现的 issue
•Doing•改进 appium•集成 cafe 到 appium•增加问题定位功能•支持 robot framework•支持中文输入
•期待更多同学加入 appium 的支持和维护工作
新技术与创新项目孵化• 在线服务 +云测 :• 录制建模与代码生成服务• 在线自动遍历服务• 在线问题定位• 接口测试自动生成
• 众测 :• 一种与 Testin 互补的众测模式
• 测试分析 :• 监控与分析建模 (NewRelic 模式 )• 专项问题发现和定位 (兼容性 , crash,内存泄漏 , 非安全 api)• 业务安全测试
23/4/13
23/4/13
测试理念• 监控分析 (数据流 + 代码路径 )• 录制建模• 云测• 众测• 敏捷
• 目标 :• 一种基于移动测试和快速功能验证的 NewRelic 在线服务
模式
• 有意合作或者投资请联系 weibo seveniruby23/4/13
捐赠页面• TesterHome创始人 : 恒温• https://me.alipay.com/testerhome
Thanks
• Q&A
• 感谢美团云提供云主机支持• 感谢 TesterHome论坛成员的分享和交流